【问题标题】:Is it possible to create a new scope whenever a component is resolved?是否可以在解析组件时创建新范围?
【发布时间】:2016-08-27 04:06:49
【问题描述】:

我正在尝试将 autofac 添加到旧版 WinForms 应用程序以管理依赖项并使其更具可测试性。

我想知道是否可以在每次注入 Func 时创建一个新的 LifeTimeScope?

我目前有:

public static TForm ResolveFormWithScope<TForm>(this ILifetimeScope self)
    where TForm : Form
{
    ILifetimeScope formScope = self.BeginLifetimeScope("FormScope");

    var form = formScope.Resolve<TForm>();
    form.Closed += (s, e) => formScope.Dispose();

    return form;
}

但理想情况下,我希望避免在我的表单中使用容器,而是使用委托工厂。

【问题讨论】:

    标签: c# autofac


    【解决方案1】:

    您正在寻找Owned&lt;T&gt; 隐式关系: http://docs.autofac.org/en/latest/advanced/owned-instances.html

    当您注入 Owned&lt;T&gt; 时,它会在其自己的生命周期范围内创建,正如您所展示的那样。

    如果您需要在自己的生命周期范围内生成多个 TForm,您还可以组合隐式关系类型并注入 Func&lt;Owned&lt;TForm&gt;&gt;,您每次需要 TForm 时都会调用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-02
      • 1970-01-01
      • 1970-01-01
      • 2014-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-07
      相关资源
      最近更新 更多