是否可以在解析组件时创建新范围?

时间:2016-08-25 21:43:07

标签: c# autofac

我正在尝试将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;
}

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

1 个答案:

答案 0 :(得分:0)

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

当您注入Owned<T>时,它就会在您自己的生命周期范围内创建,就像您所示。

如果您需要在自己的生命周期范围内生成多个TForms,您还可以组合隐式关系类型并注入每次需要TForm时调用的Func<Owned<TForm>>