Я начинаю использовать MEF с моим приложением MVC, так что он следует за SOLID priciples.Использование MEF с MVC
Я задал этот вопрос на прошлой неделе: Should a dependency be injected many "levels" up than it is needed? и часть того, что я попросил (в комментариях), если у вас есть два конструктора;
Один конструктора для зависимостей инъекций
Другого construtor без параметров
И в contstructor без параметров конкретизирует экземпляры зависимостей необходимо, то это должны сделать спорный Service Locator. Ответ заключался в том, что класс не должен создавать собственные зависимости. Хорошо, я получаю это, но глядя на эту MS учебник по MEF:
http://msdn.microsoft.com/en-us/library/hh708870(v=vs.110).aspx
Они говорят, вы должны иметь два конструктора:
public HomeController() : this(new TraceLogger())
{
}
public HomeController(ILogger logger)
{
_logger = logger;
}
Но от того, что я сказал, первый конструктор - нет-нет, поскольку класс создает свою собственную зависимость?
Кроме того, в учебнике MS просто скажет: замените второй конструктор следующим образом:
public HomeController([Import("myTraceLogger")]ILogger logger)
{
_logger = logger;
}
В чем смысл? Я все еще должен предоставить экземпляр ILogger ... если я не пропущу что-то? Я удалил конструктор по умолчанию:
public HomeController() : this(new TraceLogger())
{
}
И приложение просто говорит: «Без конструктора без параметров для этого объекта». Итак, я должен предоставить экземпляр, потому что если MEF создавал новый экземпляр, он бы работал без конструктора по умолчанию ... а если нет, то в чем смысл использования MEF? Я мог бы просто сделать инъекцию зависимости самостоятельно.
Причиной двух конструкторов здесь для тестирования сценариев. Вы используете конструктор без параметров в Unit Tests, но используете конструктор IoC в своем фактическом коде. Я до сих пор не рекомендую этого, потому что он все еще создает зависимости в самом классе, но его общий сценарий. –