2010-08-12 71 views
1

我正在使用MEF創建相同導出的多個實例。由MEF容器創建的跟蹤實例

我想跟蹤我已經創建的實例,而我無論是查詢容器或使用recomposited集合,但我從來沒有我的情況下...

下面的代碼:

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

MEF不提供此功能。你可以通過讓IFoo的每個實現導入一個IFooTracker並在IFooTracker中調用一個方法來註冊IFoo。

+0

+1丁丁。讓你的IFooTracker靜態和IDisposable清理註冊,但這是你跟蹤任何事情的方式。 – 2010-08-12 18:35:44