2016-06-15 4 views
0

Я создаю приложение MVC, используя NINject в качестве моего IOC. Я пытаюсь отделить свою бизнес-логику от контроллера. И поэтому я не хочу, чтобы мой конструктор контроллера создавал для моего любого объекта зависимости i.e. Я не хочу передавать свой интерфейс в конструкторе, а не разрешать его через контейнер IOC. Это должен быть уровень бизнес-логики. Я пытаюсь добиться чего-то вроде ниже.Удаление зависимости от конструктора контроллера в MVC

public BusinessHolidayController() 
{ 

} 
// GET: BusinessHoliday 
public ActionResult Index(Product product) 
{ 
    string model = invoke<IProduct>().GetSum(product); 
    return View(model); 
} 
+0

его общий метод – maxspan

+0

Ну, это может быть класс логики busienss, или я могу написать метод расширения для контроллера для разрешения зависимостей и получения требуемого объекта. – maxspan

+1

Не могли бы вы подробнее рассказать? Что вы подразумеваете под «Объектом зависимостей»? Самое главное, в чем вопрос? – Leo

ответ

3

Что вы выше делать склоняется к Service Locator Pattern который является анти-модель и опасный узор. Его недостатки превышают его преимущества.

Есть четыре основные модели DI -

  1. Constructor Injection Injection
  2. Свойство
  3. Метод Injecton
  4. Ambient Контекст

Для контроллера MVC, вы хотите использовать конструктор для инъекций , потому что это лучшая модель из вышеприведенных четырех моделей, особенно для контроллера.

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

Нет. Композитный корень должен быть помещен в точку входа приложения, например Global.asax.

Для получения дополнительной информации, вы хотите прочитать Mark Seemann's Dependency Injection in .NET.

+0

вы имеете в виду, что я должен разрешить свою зависимость в Global.asax или инициализаторе контейнера IOC. – maxspan

Смежные вопросы