Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
asp.net webforms的Autofac生存期范围问题_Asp.net_C# 4.0_Webforms_Autofac_Lifetime Scoping - Fatal编程技术网

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

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

我在asp.net webforms站点中的请求中遇到autofac的生存期范围问题

我在auto fac注册了一家工厂,因此:

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