AutoFac在Web表单应用程序的静态类别中解析类型



autoFac已在Web表单应用程序中配置为如下。

var builder = new ContainerBuilder();
BootStrapper.InitializeBizTypes(builder);
builder.RegisterType<Component>().**InstancePerRequest()**;
_containerProvider = new ContainerProvider(builder.Build());

在页面中,有一个与objectdatasource绑定的GridView绑定,对于ObjectDatasource,SelectMethod是静态类中的一种方法。

我在静态类中的代码:

private static IComponentContext GetContainer()
    {
        var cpa = (IContainerProviderAccessor)HttpContext.Current.ApplicationInstance;
        return cpa.ContainerProvider.ApplicationContainer;
    }
    public static IList<RoleDto> GetRoles()
    {
        ***var biz = GetContainer().Resolve<IRoleBiz>();***
        return biz.GetRoles();
    }

解决接口时我的错误低于错误。

从标签上匹配" autofacwebrequest"的标签范围是可见的 请求实例的范围。

如果您在执行Web应用程序期间看到了这一点,则通常 表示正在注册为每个HTTP请求的组件正在 由SingleSinstance()组件(或类似场景)请求。 在Web集成下,总是请求依赖 依赖关系解析器或请求寿命范围,从不 容器本身。

所以我的问题是,当生命周期为" instanceperrequest"时,如何在ASP.NET Web表单应用程序中的静态类中解析注册类型?

为了从请求范围中解析某些内容,您应该使用RequestLifetime的 CC_1属性而不是ApplicatonContainer

public static IList<RoleDto> GetRoles()
{
    var cpa = ((IContainerProviderAccessor)HttpContext.Current.ApplicationInstance);
    var scope = cpa.RequestLifetime; 
    var biz = scope.Resolve<IRoleBiz>();
    return biz.GetRoles();
}

最新更新