【发布时间】:2020-07-10 13:51:25
【问题描述】:
我不明白为什么我的组件永远不会在 Autofac 中处理/发布。
我有一个标准的 WPF 应用程序,它从 app.xaml.cs 开始,解析作为单例的 MainVM,并显示 MainWindow 和 DataContext 的 MainVM。
然后我主要使用我的注册组件的构造函数注入,这些组件是单例或(默认)instancePerDependency,每次注入时都会创建新的。或者我有时有工厂来传递一些自定义参数。
例如,工厂如下所示:
public delegate MyComponent Factory(string parameter1, int parameter2);
注入看起来像这样:
public MainVM(MyComponent.Factory createMyComponent)
...
public void makeNewComponent()
{
var myComponent = this.createMyComponent("test", 1);
myComponent.DoStuff();
}
这就是我的组件的注册方式:
containerBuilder.RegisterType<T>().OnActivated(args => (args.Instance as IInitializable)?.Initialize());
builder.RegisterType<MyComponent>().As<IMyComponent>().OnActivated(args => (args.Instance as IInitializable)?.Initialize());
// This will never be called in my code: .OnRelease(instance => (instance as IInitializable)?.Uninitialize())*/;
现在让我们想象一下,我在其他视图模型中创建了许多这样的视图模型,所以我们有 MainVM -> MyComponent -> OtherComponent,并且在操作完成后我希望它们处理(或只是为了以某种方式从记忆中消失),调用Dispose()或从Autofac调用OnRelease事件。这些都可以。
但我的问题是 - 我没有使用这种模式:
using(var scope = container.BeginLifetimeScope())
'因为我没有在从 { 到 } 的一种方法中工作。我需要我的组件以多种方法存在于对象中,例如,在我从视图堆栈中删除ViewModel1 之后,我希望在此ViewModel1 中创建的所有内容都可以释放/释放其子项。是什么导致组件认为它们可以被丢弃?如果视图模型不是在生命周期范围内创建的,我如何告诉它不再需要它?
【问题讨论】:
标签: c# .net wpf dependency-injection autofac