我将集装箱设置如下:
....
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);
发布于 2014-04-23 09:51:39
解决办法很简单。不知道我怎么错过的。
batch.AddExportedValue((IDataFeed)_dataClient);
https://stackoverflow.com/questions/23240002
复制相似问题