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
在不同的組件,我不能觸摸它們。然而它們分別執行IDataFeed
和IOrderFeed
(但是它們的類型分別是DataClient
和OrderClient
)。後來我期待他們在一個構造函數中:
[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);