我一直在嘗試使用可配置的提供程序模型來處理我的MEF導入和導出MEF Contrib(link)。我已閱讀Codeplex文檔和Code Junkie的博客文章(link);但是,我似乎無法獲得容器來創建零件。我哪裏錯了?MEF Contrib提供程序模型不導入零件
的Program.cs
namespace MEFTest
{
class Program
{
static void Main(string[] args)
{
Program p = new Program();
p.Run();
}
// [ImportMany("command", typeof(IHelp))]
public IEnumerable<IHelp> Commands { get; set; }
void Run()
{
Compose();
foreach(IHelp cmd in Commands)
{
Console.WriteLine(cmd.HelpText);
}
Console.ReadKey();
}
void Compose()
{
var provider = new ConfigurableDefinitionProvider("mef.configuration");
var catalog = new DefinitionProviderPartCatalog<ConfigurableDefinitionProvider>(provider);
var container = new CompositionContainer(catalog);
container.ComposeParts(this);
}
}
}
TestCommand.cs
namespace MEFTest
{
//[Export("command", typeof(IHelp))]
public class TestCommand : IHelp
{
private string _helpText = "This is a test.";
public string CommandName
{
get { return "Test"; }
}
public string HelpText
{
get { return _helpText; }
}
}
}
App.Config中部分:
<mef.configuration>
<parts>
<part type="MEFTest.TestCommand, MEFTest">
<exports>
<export contract="IHelp" />
</exports>
</part>
<part type="MEFTest.Program, MEFTest">
<imports>
<import member="Commands" contract="IHelp" />
</imports>
</part>
</parts>
</mef.configuration>
我沒有得到任何構建錯誤,如果我它運行良好切換到作爲MEF核心組成部分的典型的基於屬性的系統(也使用相應的目錄)。在上面的例子中,Program.Commands始終爲NULL。我試圖只使用一個單一的屬性,而不是一個集合,並得到相同的結果。
當我調試我可以得到provider.Parts集合,所以我知道它正在正確訪問配置信息;但是,每當我調試並嘗試鑽入catalog.Parts時,我都會得到一個InvalidOperationException異常。
任何人都有任何經驗,我在哪裏出錯了嗎?