【问题标题】:Autofac lifetime scope issue with asp.net webformsasp.net webforms的Autofac生命周期范围问题
【发布时间】:2013-09-20 15:22:40
【问题描述】:

我在 asp.net 网络表单站点中的请求中持续存在的 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

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

非常感谢

会

【问题讨论】:

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


    【解决方案1】:

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

    来自 Autofac 维基:WebFormsIntegration

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

    所以将您的注册更改为:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-19
      • 1970-01-01
      • 1970-01-01
      • 2020-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-16
      相关资源
      最近更新 更多