1
我有幾個類似這樣的班......沒有創造有需要的參數類MEF ComposeParts被注入
[Export(typeof (IMessageReader))]
public class DropboxFolderWatchMessageReader : IMessageReader
和信息讀取器類這樣的...
public class MessageReader
{
[ImportMany(typeof(IMessageReader))]
private List<IMessageReader> readers;
public List<Message> GetMessages()
{
var result = new List<Message>();
readers.ForEach(r => result.AddRange(r.GetMessages()));
return result;
}
}
我的工作單位做到這一點...
public IEnumerable<Message> FetchMessages()
{
var reader = new MessageReader();
MefComposer.Container.ComposeParts(reader);
var messages = reader.GetMessages();
var result = AddMessages(messages);
return result;
}
在我的第一次迭代中,這是所有有它和它的所有工作就好了。
然後我不得不讓我的消息的讀者做了一點,這反過來,意味着我需要傳遞參數的構造函數...
public DropboxFolderWatchMessageReader(IConfig config)
{
//...
}
當我試圖運行我的代碼得到了一個消息,說明我的讀者不能被創建,因爲他們不再有默認的構造函數。我需要用[ImportingConstructorAttribute]
來裝飾一個構造函數。所以,我補充說...
[System.ComponentModel.Composition.ImportingConstructorAttribute]
public DropboxFolderWatchMessageReader(IConfig config)
{
//...
}
現在編譯並運行正常,但readers
集合總是空的。
在其他構造函數中使用相同類型的類中,有Unity注入的對象。這似乎沒有發生在我的MEF代碼中。
所以,這個問題...
如何獲得系統:
- 進樣
IConfig
在我的閱讀器類的構造函數 - 強制讀者收集回去以我的導出的閱讀器類來填充它。