我正在尝试将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;
}
但理想情况下,我希望避免在我的表单中使用容器,而是使用委托工厂。
答案 0 :(得分:0)
您正在寻找Owned<T>
隐式关系:
http://docs.autofac.org/en/latest/advanced/owned-instances.html
当您注入Owned<T>
时,它就会在您自己的生命周期范围内创建,就像您所示。
如果您需要在自己的生命周期范围内生成多个TForms,您还可以组合隐式关系类型并注入每次需要TForm时调用的Func<Owned<TForm>>
。