2014-04-23 29 views
1

我設置的容器如下:CompositionBatch.AddExportedValue與類型指定

.... 
CompositionContainer container = new CompositionContainer(catalog); 
CompositionBatch batch = new CompositionBatch(); 

batch.AddExportedValue(_dataClient); 
batch.AddExportedValue(_orderClient); 
batch.AddExportedValue(container); 
container.Compose(batch); 

_dataClient_orderClient在不同的組件,我不能觸摸它們。然而它們分別執行IDataFeedIOrderFeed(但是它們的類型分別是DataClientOrderClient)。後來我期待他們在一個構造函數中:

[ImportingConstructor] 
public ShellViewModel(IShellView view, IDataFeed dataFeed, IOrderFeed orderFeed) 
... 

但是這會拋出ImportCardinalityMismatchException。但是,如果我改變構造函數,這個它的工作原理:

[ImportingConstructor] 
public ShellViewModel(IShellView view, DataClient dataFeed, OrderClient orderFeed) 
... 

我試過,但同樣的異常升高:

... 
batch.AddExportedValue(typeof(IDataFeed).FullName, _dataClient); 
batch.AddExportedValue(typeof(IOrderFeed).FullName, _orderClient); 
... 

如何添加_dataClient_orderClient的容器,如果我這樣做:

[Export(typeof(IDataFeed))] 
public class DataClient : IDataFeed 
{ 
    ... 

我該怎麼做?理想情況是這樣的:

batch.AddExportedValue(typeof(IDataFeed), _dataClient); 

回答

0

該修復很容易。不知道我是如何錯過的。

batch.AddExportedValue((IDataFeed)_dataClient);