2011-02-24 64 views
3

我想通過類型綁定到對象instanced。C#MEF不能做類型綁定?

什麼我現在要做的:

var catalog = new AssemblyCatalog(typeof(...).Assembly); 

var container = new CompositionContainer(catalog); 
    var batch = new CompositionBatch(); 
var mySamurai = new Samurai(); 
batch.AddPart(mySamurai);//I would prefer the type not an object...  
    container.Compose(batch); 
mySamurai.Attack(); 

這是工作,但我想這樣做:

var catalog = new AssemblyCatalog(typeof(...).Assembly); 
var container = new CompositionContainer(catalog); 
var batch = new CompositionBatch(); 

batch.AddPart(typeof(Samurai));//HERE container.Compose(batch);   
var mySamurai = new Samurai(); 
mySamurai.Attack(); 

那是可能的MEF?

回答

1

通常情況下,您可以在MEF中設置導出和導入屬性,而不是像Ninject那樣在代碼中進行配置。

即使MEF不在框中執行「代碼中的配置」,仍然可以使用MEFContrib項目對factory export provider執行此操作。

更新:在MEF2-Preview3中添加了attribute-less registration

此外,Mark Seemann blogged關於通過巧妙使用屬性導出和泛型,即使不使用新的無屬性註冊來「註冊」類型的方法。

1

如果我正確地理解你,沒有辦法做到這一點。 MEF在看到虛假實體2時無法做任何事情,因爲MEF從未真正「看到」它。你必須像使用fakeEntity一樣將它傳遞給容器,或者你必須導出FakeEntity類,並以某種方式從容器中取出它(例如使用GetExportedValue)。

+0

我想讓MEF綁定一種FakeEntityInheritEntity來爲它注入一種類型。 – 2011-02-24 20:28:16

+0

我改變了我的問題,以便更準確。 – 2011-02-24 20:49:35

+0

@Daok你不能那樣做。 MEF無法知道您創建的對象完全獨立於它。您可以將一個'ExportAttribute'添加到'Samurai'並調用'container.GetExportedValue ()'。 – 2011-02-24 21:15:54

0

我對MEF瞭解不多,但是你的情況看起來像是Ninject,Unity,StuctureMap,Castle Windsor等等的IoC容器。