我第一次在 Visual Studio 2010 beta 2 中使用 .net-4.0 中的 System.ComponentModel.Composition 试用托管可扩展性框架。
我一直无法让 CompositionContainer 使用下面的两个替代例程找到我的实现程序集。
第一次尝试(这在 MEF 的旧 codeplex 版本中有效):
var composition = new CompositionBatch();
composition.AddPart(this);
var container = new CompositionContainer(new DirectoryCatalog(AppDomain.CurrentDomain.BaseDirectory));
container.Compose(composition);
第二次尝试(我认为这在 beta 1 中有效):
var aggregateCatalog = new AggregateCatalog(
new AssemblyCatalog(Assembly.GetExecutingAssembly()),
new DirectoryCatalog(AppDomain.CurrentDomain.BaseDirectory));
var compositionContainer = new CompositionContainer(aggregateCatalog);
compositionContainer.ComposeParts(this);
在 beta 2 中是否有新的方法可以做到这一点?
编辑:原来这与作文无关。我有一个代表我导入的实现的静态属性:
[Import] public static ILog Log { get; set; }
应该是:
[Import] public ILog Log { get; set; }
我将丹尼尔的答案标记为已接受,因为以更彻底的方式进行调试的明智建议解决了问题。