asp.net webforms的Autofac生存期范围问题
我在asp.net webforms站点中的请求中遇到autofac的生存期范围问题 我在auto fac注册了一家工厂,因此:asp.net webforms的Autofac生存期范围问题,asp.net,c#-4.0,webforms,autofac,lifetime-scoping,Asp.net,C# 4.0,Webforms,Autofac,Lifetime Scoping,我在asp.net webforms站点中的请求中遇到autofac的生存期范围问题 我在auto fac注册了一家工厂,因此: builder.RegisterType<DoSomethingFactory>().As<IDoSomethingFactory>().InstancePerLifetimeScope(); builder.RegisterType(); 当然,这发生在app_start中 然后我有一个简单的用户控件,它调用这个工厂的一个方法 IDoSo
builder.RegisterType<DoSomethingFactory>().As<IDoSomethingFactory>().InstancePerLifetimeScope();
builder.RegisterType();
当然,这发生在app_start中
然后我有一个简单的用户控件,它调用这个工厂的一个方法
IDoSomethingFactory doSomethingFactory = Resolver.Resolve<IDoSomethingFactory>();
Number.Text = doSomethingFactory.DoSomething().ToString();
IDoSomethingFactory doSomethingFactory=Resolver.Resolve();
Number.Text=doSomethingFactory.DoSomething().ToString();
我在一个页面上有两个该控件的实例,因此DoSomething方法应该被调用两次,工厂也应该被解析两次
第一次运行站点时,DoSomethingFactory的contstructor被激发,随后有2次对DoSomething方法的调用。第二个请求将导致对DoSomething方法的两次调用,而不会对工厂进行新的更新
如果我在注册表中取出InstancePerLifetimeScope,那么工厂将在每个解析中实例化。我看到的关于MVC站点的大多数答案。我也有一个MVC站点,并且正在以同样的方式使用它,它正在按要求工作,因此需要对asp.net webforms提出问题
为了清楚起见,我希望工厂在每个请求中实例化一次。欢迎提供任何帮助或想法
非常感谢
Will如果您希望每个请求都有一个
DoSomethingFactory
实例,则需要使用InstancePerHttpRequest
扩展方法
从Autofac wiki:
ASP.NET集成添加了一个特殊的组件生存期,允许组件实例在单个HTTP请求的生存期内生存。您可以使用Autofac.Integration.Web
命名空间中的instanceperhtprequest()
扩展方法注册组件
因此,请将您的注册更改为:
builder.RegisterType<DoSomethingFactory>()
.As<IDoSomethingFactory>()
.InstancePerHttpRequest();
builder.RegisterType()
.As()
.InstancePerHttpRequest();