代码之家  ›  专栏  ›  技术社区  ›  Florian Doyon

跟踪由MEF容器创建的实例

  •  1
  • Florian Doyon  · 技术社区  · 15 年前

    我正在使用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 回复  |  直到 15 年前
        1
  •  1
  •   Daniel Plaisted    15 年前

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

    推荐文章