Autofac已在Web窗体应用程序中配置如下。
var builder = new ContainerBuilder();
BootStrapper.InitializeBizTypes(builder);
builder.RegisterType<Component>().**InstancePerRequest()**;
_containerProvider = new ContainerProvider(builder.Build());在页面中有一个与GridView绑定的ObjectDataSource,对于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应用程序时看到这一点,它通常表示SingleInstance()组件(或类似的场景)请求按HTTP请求注册的组件。在web集成下,总是从依赖项解析器或请求生存期范围请求依赖项,而不是从容器本身请求依赖项。
因此,我的问题是,当生存期范围为“asp.net”时,如何解决asp.net web表单应用程序中静态类中已注册的类型?
发布于 2017-09-06 10:53:33
为了解决请求范围中的问题,您应该使用IContainerProviderAccessor的IContainerProviderAccessor属性,而不是ApplicatonContainer
public static IList<RoleDto> GetRoles()
{
var cpa = ((IContainerProviderAccessor)HttpContext.Current.ApplicationInstance);
var scope = cpa.RequestLifetime;
var biz = scope.Resolve<IRoleBiz>();
return biz.GetRoles();
}https://stackoverflow.com/questions/46068050
复制相似问题