Вызов контейнера DI непосредственно в коде метода (действия MVC) - PullRequest
2 голосов
/ 15 июня 2010

Я играю с DI (используя Unity).Я научился делать конструктор и инъекцию свойств.У меня есть статический контейнер, доступный через свойство в моем файле Global.asax (класс MvcApplication).

Мне нужен ряд различных объектов в моем контроллере.Неправильно вводить их через конструктор, отчасти из-за их большого количества, а отчасти потому, что они нужны только в некоторых методах Actions.

Вопрос в том, есть ли что-то не так свызывать мой контейнер напрямую из методов Action?

public ActionResult Foo()
{
    IBar bar = (Bar)MvcApplication.Container.Resolve(IBar);
    // ... Bar uses a default constructor, I'm not actually doing any
    // injection here, I'm just telling my conatiner to give me Bar
    // when I ask for IBar so I can hide the existence of the concrete
    // Bar from my Controller.
}

Это кажется самым простым и наиболее эффективным способом выполнения действий, но я никогда не видел такого примера.

Что-то не так с этим?Я что-то упускаю из виду?

1 Ответ

3 голосов
/ 15 июня 2010

Да, там это что-то не так с использованием статического локатора службы, потому что это анти-шаблон .

Внедрение в конструктор это вашалучший вариантЕсли конструктор становится слишком большим, это признак того, что Контроллер нарушает Принцип единой ответственности и что вам следует рефакторинг для агрегирования услуг .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...