首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Web窗体应用程序静态类中的Autofac解析类型

Web窗体应用程序静态类中的Autofac解析类型
EN

Stack Overflow用户
提问于 2017-09-06 06:15:26
回答 1查看 963关注 0票数 0

Autofac已在Web窗体应用程序中配置如下。

代码语言:javascript
运行
复制
var builder = new ContainerBuilder();
BootStrapper.InitializeBizTypes(builder);
builder.RegisterType<Component>().**InstancePerRequest()**;
_containerProvider = new ContainerProvider(builder.Build());

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

我在静态课堂上的代码:

代码语言:javascript
运行
复制
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表单应用程序中静态类中已注册的类型?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-06 10:53:33

为了解决请求范围中的问题,您应该使用IContainerProviderAccessorIContainerProviderAccessor属性,而不是ApplicatonContainer

代码语言:javascript
运行
复制
public static IList<RoleDto> GetRoles()
{
    var cpa = ((IContainerProviderAccessor)HttpContext.Current.ApplicationInstance);
    var scope = cpa.RequestLifetime; 

    var biz = scope.Resolve<IRoleBiz>();
    return biz.GetRoles();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46068050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档