1

我在 asp.net webforms 站点中的请求中持续存在的 autofac 的生命周期范围存在问题。

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

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

这当然发生在 app_start 中。

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

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

我在一个页面上有这个控件的两个实例,所以 DoSomething 方法应该被调用两次并且工厂也应该被解析两次。

第一次运行该站点时,DoSomethingFactory 的构造函数被触发,随后对 DoSomething 方法进行了 2 次调用。第二个请求导致对 DoSomething 方法的 2 次调用,而没有对工厂进行全新的更新。

如果我在注册时取出 InstancePerLifetimeScope,那么每次解析都会实例化工厂。我看到的大多数答案都是关于 MVC 站点的。我也有一个 MVC 站点,并以相同的方式使用它,它按要求工作,因此需要询问 asp.net webforms

需要明确的是,我希望每个请求都实例化一次工厂。欢迎任何帮助或想法。

非常感谢

将要

4

1 回答 1

2

如果您希望DoSomethingFactory每个请求都有一个实例,则需要使用InstancePerHttpRequest扩展方法。

来自 Autofac wiki:WebFormsIntegration

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

因此,将您的注册更改为:

builder.RegisterType<DoSomethingFactory>()
       .As<IDoSomethingFactory>()
       .InstancePerHttpRequest();
于 2013-09-20T20:39:56.910 回答