跟踪MEF容器创建的实例

时间:2010-08-12 15:36:53

标签: c# ioc-container mef

我正在使用MEF创建同一导出的多个实例。

我想跟踪我创建的实例,并且要么查询容器要么使用重新编译的集合,但我从来没有得到我的实例......

以下是代码:

interface IFoo{};
[Export(typeof(IFoo)),PartCreationPolicy(CreationPolicy.NonShared)]
class Foo{};

  class FooTracker{
     CompositionContainer _container; 
     int HowManyValues()
     {
       // this always returns 1 and invokes a constructor
       return _container.GetExportedValue<IFoo>().Count();
     }

     int HowManyExports(){
       // idem
       return _container.GetExports<IFoo>().Count();
     }

     // idem
     [ImportMany(AllowRecomposition=true,AllowRecomposition=true)]
     protected IEnumerable<IFoo> Foos { get; set; }
  }

我想要的是已经存在的实例,如果没有,则不创建新的实例。

谢谢, 弗洛里安

1 个答案:

答案 0 :(得分:1)

MEF不提供此功能。您可以通过让IFoo的每个实现导入IFooTracker并在IFooTracker中调用方法来注册IFoo来实现。