Я впервые испытываю платформу Managed Extensibility Framework в бета-версии 2 Visual Studio 2010, используя System.ComponentModel.Composition из .net-4.0.
Мне не удалось заставить CompositionContainer найти мои сборки реализации, используя две альтернативные подпрограммы ниже.
Первая попытка (это работало в более старом выпуске MEF для codeplex):
var composition = new CompositionBatch();
composition.AddPart(this);
var container = new CompositionContainer(new DirectoryCatalog(AppDomain.CurrentDomain.BaseDirectory));
container.Compose(composition);
Вторая попытка (думаю, это сработало в бета-версии 1):
var aggregateCatalog = new AggregateCatalog(
new AssemblyCatalog(Assembly.GetExecutingAssembly()),
new DirectoryCatalog(AppDomain.CurrentDomain.BaseDirectory));
var compositionContainer = new CompositionContainer(aggregateCatalog);
compositionContainer.ComposeParts(this);
Есть ли новый способ сделать это в бета-версии 2?
РЕДАКТИРОВАТЬ: Оказалось, не имеет ничего общего с композицией. У меня было статическое свойство, представляющее мою импортированную реализацию:
[Import] public static ILog Log { get; set; }
который должен был быть:
[Import] public ILog Log { get; set; }
Я отметил ответ Даниила как принятый, потому что мудрый совет отладки более тщательным образом решил проблему.