我担心我可能会遗漏一些基本/基本的东西。我正在尝试在 WinForms/WPF 应用程序中使用 Castle.Windsor,但我遇到了组件的 Lifestyle 问题。
我有一个名为 ViewFactory 的 TypedFactory,我用它来解析我的视图。每个视图都需要一个 ViewModel,因此我为它们提供了接口,并注册了组件,以便 Windsor 为我负责注入它们。我一直在为所有事情使用“瞬态”生活方式,因为我找不到更匹配的东西。然后我尝试在完成后“释放”它们,但它们会永远存在。这导致内存消耗不断增加。
我的注册:
container.AddFacility<TypedFactoryFacility>
container.Register(
Component.For<IDemoViewModel>()
.ImplementedBy<DemoViewModel>()
.LifestyleTransient(),
Component.For<IDemoView>()
.ImplementedBy<DemoView>()
.LifestyleTransient(),
Component.For<IViewFactory>()
.AsFactory()
);
我的 IViewFactory 很简单:
public interface IViewFactory
{
T Create<T>()
void Release(IView view)
}
我正在使用我的 ViewFactory 来创建我的视图实例:
ViewFactory.Create<DemoView>();
在我的 DemoView 的构造函数中,我有一个用于 IViewModel 接口的参数,这样 Castle.Windsor 就可以解析和注入一个实例。当表单关闭时,我明确地尝试释放视图。
public class DemoView
{
public IViewFactory ViewFactory { get; set; }
private IDemoViewModel _viewModel;
public DemoView(IDemoViewModel viewModel)
{
_viewModel = viewModel;
DataContext = _viewModel;
this.Closed += new FormClosedEventHandler(HandleViewClosing);
}
private void HandleViewClosing(Object sender, FormClosedEventArgs e)
{
ViewFactory.Release(this);
}
}
对于如何正确处理 Castle.Windsor 的视图/视图模型,我将不胜感激。当视图关闭时,我需要视图以及为它创建的任何依赖项都被销毁。
谢谢你的帮助。