我在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进行提问
要清楚,我希望每次请求都能实例化工厂。欢迎任何帮助或想法。
非常感谢
威尔
答案 0 :(得分:2)
如果您想要为每个请求设置一个DoSomethingFactory
个实例,则需要使用InstancePerHttpRequest
扩展方法。
来自Autofac wiki:WebFormsIntegration
ASP.NET集成添加了一个特殊的组件生命周期,允许组件实例在单个HTTP请求的生命周期中存活。您可以使用
InstancePerHttpRequest()
命名空间中的Autofac.Integration.Web
扩展名方法注册组件。
所以请将注册更改为:
builder.RegisterType<DoSomethingFactory>()
.As<IDoSomethingFactory>()
.InstancePerHttpRequest();