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();
}