gre*_*ade 5 c# mef .net-4.0 visual-studio-2010
我正在使用.net-4.0中的System.ComponentModel.Composition在Visual Studio 2010 beta 2中首次尝试Managed Extensibility Framework.
我无法使用下面两个替代例程让CompositionContainer找到我的实现程序集.
第一次尝试(这在MEF的较旧的codeplex版本中有效):
var composition = new CompositionBatch();
composition.AddPart(this);
var container = new CompositionContainer(new DirectoryCatalog(AppDomain.CurrentDomain.BaseDirectory));
container.Compose(composition);
Run Code Online (Sandbox Code Playgroud)
第二次尝试(我认为这在beta 1中有效):
var aggregateCatalog = new AggregateCatalog(
new AssemblyCatalog(Assembly.GetExecutingAssembly()),
new DirectoryCatalog(AppDomain.CurrentDomain.BaseDirectory));
var compositionContainer = new CompositionContainer(aggregateCatalog);
compositionContainer.ComposeParts(this);
Run Code Online (Sandbox Code Playgroud)
在测试版2中是否有新的方法可以做到这一点?
编辑:事实证明这与作曲无关.我有一个静态属性代表我导入的实现:
[Import] public static ILog Log { get; set; }
Run Code Online (Sandbox Code Playgroud)
应该是:
[Import] public ILog Log { get; set; }
Run Code Online (Sandbox Code Playgroud)
我将Daniel的答案标记为已被接受,因为以更彻底的方式调试的sage建议解决了这个问题.
什么是失败?是否存在您期望得到满足但未得到满足的导入?您是否正在调用 GetExports() 但它失败了?
创建目录后,您可以中断调试器,并将鼠标悬停在aggregateCatalog 变量上以检查它并查看其中包含哪些部分。我的猜测是这些部件可能在目录中,而问题出在代码的其他地方。可能的原因是您的集合导入使用 [Import] 属性而不是 [ImportMany],和/或您的部件被拒绝,因为它们具有无法满足的导入。
| 归档时间: |
|
| 查看次数: |
1015 次 |
| 最近记录: |