1
據我所知,爲了使導入/導出屬性相互正確連接,我必須爲每個具有這些屬性的新實例調用compositionContainerInstance.Compose(...)
。MEF - 我可以創建實例並自動將它們組合到MEF中嗎?
是否有可能自動發生這種情況,所以我不必每當創建一些可組合類的新實例時都這樣做?
這將是一個例子,雖然時間長了,但它抽象了我擁有的問題。
public class Worker1
{
[Import(typeof(IDataProvider))]
public IDataProvider DataProvider;
public Worker2 second;
//use data provider to perform logic
}
public class Worker2
{
[Import(typeof(IDataProvider))]
public IDataProvider DataProvider;
//use data provider to perform logic
}
[Export(typeof(IDataProvider))]
public class GeoDataProvider : IDataProvider
{
//implements logic
}
public class Container
{
private Worker1 t1;
public void Init()
{
AggregateCatalog cat = new AggregateCatalog();
cat.Catalogs.Add(new AssemblyCatalog(Assembly.GetExecutingAssembly()));
cat.Catalogs.Add(new DirectoryCatalog("."));
CompositionContainer c = new CompositionContainer(cat);
c.ComposeParts(new GeoDataProvider(), this);
}
public void PerformLogic()
{
t1 = new Worker1;
//here it fails because I need c.ComposeParts(t1):
t1.DoSomethingWithProvider();
//but even if I do c.ComposeParts(t1), still the t1.second.DataProvider will be null
//how to avoid this?
}
}
什麼我希望的是一種自由創作Worker1/Worker2的新實例,而無需知道他們在使用前必須組成。這是可行的嗎?
謝謝,這真是一個很好的答案。不幸的是,我的一些工作人員實際上是UserControls(由設計師實例化),所以我必須在每個嵌套控件內添加一些邏輯來編寫這些實例。再次感謝!我現在真的瞭解了這個MEF :) – veljkoz 2010-12-14 16:44:51