1

我正在使用带有静态 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 有一个 PartCreationPolicy 和 CreationPolicy.Shared
4

2 回答 2

0

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

于 2012-12-04T19:25:10.740 回答
0

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

于 2012-12-06T10:36:08.417 回答