Централизация состава MEF - PullRequest
2 голосов
/ 03 июня 2011

В настоящее время все классы, которые у меня есть, обрабатывают свой собственный импорт. Используя типичный пример:

[ImportMany]
private Lazy<ISomeInterface>[] someOfMyInterfaces { get; set; }
public MyConstructor()
{
    AssemblyCatalog catalog = new AssemblyCatalog(Assembly.GetExecutingAssembly());
    CompositionContainer container = new CompositionContainer(catalog);
    container.ComposeParts(this);
}

Теперь я хочу использовать сводный каталог, и мне нужно изменить реализацию всех моих классов, которые принимают импорт. Я хочу поместить эту логику в централизованное место. В основном устранение зависимости моих классов от составления собственных частей. Есть ли хорошие модели для этого?

1 Ответ

1 голос
/ 04 июня 2011

Да, вы определенно не хотите создавать контейнер в каждой из ваших частей.Вместо этого постарайтесь, чтобы каждая часть с импортом также имела экспорт, который импортируется другой частью.Затем в своем коде запуска вы создаете контейнер и извлекаете из него корневой экспорт, что приведет к созданию всех остальных частей и выполнению импорта при необходимости.

...