即使在我调用Release之后,Windsor也没有释放我的瞬态组件

时间:2013-06-20 01:13:16

标签: c# inversion-of-control castle-windsor ioc-container castle

我担心我可能遗漏了一些基本/基本的东西。我正在尝试在WinForms / WPF应用程序中使用Castle.Windsor,但我遇到了我的组件生活方式的问题。

我有一个名为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正确处理Views / ViewModel的任何亮点。当视图关闭时,我需要View,并且为它创建的任何依赖项都会被破坏。

感谢您的帮助。

0 个答案:

没有答案