【问题标题】:How to unregister a ComposablePart from CompositionContainer如何从 CompositionContainer 注销 ComposablePart
【发布时间】:2012-11-17 14:58:11
【问题描述】:

我正在使用带有静态 CompositionContainer 的 MEF。我的班级像这样使用这个容器:

public void SomeClass
{
    [Import(typeof(AnotherClass)]
    private AnotherClass Instance {get;set;}

    public SomeClass()
    {
        MEFContext.RegisterAttributedPart(this); // this basically calls CompositionContainer.ComposeParts(this);
    }
}

现在的问题是,SomeClass 的实例永远不会被释放,因为 CompositionContainer 为它保留了一个实例。我怎样才能释放这个实例?

附加信息:

  • AnotherClass 具有带有 CreationPolicy.Shared 的 PartCreationPolicy

【问题讨论】:

    标签: c# memory-leaks mef composition


    【解决方案1】:

    CompositionContainer 实现 IDisposable。您是在 CompositionContainer 上调用 Dispose 还是 using 模式并释放对它的引用?

    【讨论】:

      【解决方案2】:

      在 .NET 4 中,使用的 MEF 实现似乎不支持子容器和过滤目录。我通过创建一个新容器并使用仅包含必要项目的目录解决了上述问题。这个容器在我不再需要时被丢弃。在 .NET 4.5 中,这可以通过子容器来解决。

      【讨论】:

        猜你喜欢
        • 2021-01-24
        • 2017-12-31
        • 2015-08-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-16
        • 1970-01-01
        • 2023-04-09
        相关资源
        最近更新 更多