Я, конечно, могу сочувствовать нежеланию использовать MEF в качестве DI-контейнера, но я думаю, что вы все равно должны подумать, может ли это быть неприменимо к вашим надстройкам.
Вам уже требуется, чтобы ваши надстройки использовали MEF , поэтому все они будут сильно зависеть от него. Хотя мне лично не нравится жестко закодированный подход, основанный на атрибутах, используемый MEF, похоже, вы спрашиваете, как каждая надстройка может зарегистрироваться в DI-контейнере. Для меня это звучит жестко, так что вы можете просто использовать MEF до конца.
Применение атрибутов MEF - это регистрация компонента.
Если вы действительно не хотите использовать MEF, у вас есть только несколько других вариантов (ни один из них не является особенно привлекательным):
- Требовать, чтобы все надстройки также сильно зависели от Unity. Я полностью понимаю, почему вы не хотите этого делать, но я просто включил эту опцию для полноты
- Требовать, чтобы все надстройки также сильно зависели от Common Service Locator. На мой взгляд, это лишь немного сдвигает проблему.
- Определите свой собственный интерфейс регистрации надстроек , который должны быть реализованы всеми надстройками. Затем вы можете написать свою собственную реализацию, которая использует Unity, чтобы все надстройки регистрировались под этот интерфейс, но тогда вы бы более или менее просто дублировали функции MEF.
- Напишите все надстройки в DI-дружественном, но независимом от контейнера стиле . Это оставляет проблему с настройкой DI-контейнера, и вам придется прибегнуть к конфигурации XML для этого. Это очень хрупкий подход и может быстро привести к поддержанию ада , так что еще раз я просто включаю эту опцию ради полноты.
Использование MEF для надстроек не мешает вам использовать Unity в вашем основном приложении, но я понимаю, что оно очень легкое, так что это может не иметь большого смысла.