Autofac解析Web窗体应用程序

时间:2017-09-06 06:15:27

标签: asp.net webforms autofac

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

解析界面时出现以下错误。

  

没有标记匹配的范围&#39; AutofacWebRequest&#39;是可见的   请求实例的范围。

     

如果您在执行Web应用程序期间看到这种情况,通常会这样   表示正在按照HTTP请求注册的组件   由SingleInstance()组件(或类似方案)请求。   在Web集成下总是请求来自的依赖项   依赖解析器或请求生命周期范围,永远不会从   容器本身。

所以我的问题是,当生命周期范围为&#34; InstancePerRequest&#34;?

时,如何在asp.net Web表单应用程序中解析静态类中的已注册类型

1 个答案:

答案 0 :(得分:0)

要解决请求范围内的问题,您应该使用RequestLifetime的{​​{1}}属性而不是IContainerProviderAccessor

ApplicatonContainer