asp.net webforms的Autofac生命周期范围问题

时间:2013-09-20 15:22:41

标签: asp.net c#-4.0 webforms autofac lifetime-scoping

我在asp.net webforms网站的请求中遇到autofac的生命周期范围问题。

我在汽车公司注册了一家工厂:

builder.RegisterType<DoSomethingFactory>().As<IDoSomethingFactory>().InstancePerLifetimeScope();

这当然发生在app_start中。

然后我有一个简单的用户控件来调用这个工厂的方法

IDoSomethingFactory doSomethingFactory = Resolver.Resolve<IDoSomethingFactory>();
Number.Text = doSomethingFactory.DoSomething().ToString();

我在页面上有两个这种控件的实例,因此DoSomething方法应该被调用两次,工厂也应该被解析两次。

我第一次运行该站点时,会触发DoSomethingFactory的contstructor,并且会对DoSomething方法进行2次后续调用。第二个请求导致2次调用DoSomething方法而没有新出现的工厂。

如果我在注册时取出InstancePerLifetimeScope,则会在每个分辨率上实例化工厂。我在这个关于MVC网站的讨论中看到的大多数答案。我也有一个MVC网站,并以相同的方式使用它,它按照要求工作,因此需要对asp.net webforms进行提问

要清楚,我希望每次请求都能实例化工厂。欢迎任何帮助或想法。

非常感谢

威尔

1 个答案:

答案 0 :(得分:2)

如果您想要为每个请求设置一个DoSomethingFactory个实例,则需要使用InstancePerHttpRequest扩展方法。

来自Autofac wiki:WebFormsIntegration

  

ASP.NET集成添加了一个特殊的组件生命周期,允许组件实例在单个HTTP请求的生命周期中存活。您可以使用InstancePerHttpRequest()命名空间中的Autofac.Integration.Web扩展名方法注册组件。

所以请将注册更改为:

builder.RegisterType<DoSomethingFactory>()
       .As<IDoSomethingFactory>()
       .InstancePerHttpRequest();