Внедрение зависимости в базовый класс - PullRequest
2 голосов
/ 28 мая 2010

Я начинаю с Dependency Injection, и у меня возникают проблемы с внедрением зависимости в базовый класс.

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

У меня есть зависимость внутри этого базового контроллера, которую я хотел бы внедрить с помощью Ninject, однако, когда я настроил это так, как для других зависимостей, компилятор сказал мне:

Ошибка 1 'MyProject.Controllers.BaseController' не содержит конструктор, который принимает 0 аргументов

Это имеет смысл, но я просто не уверен, как внедрить эту зависимость. Должен ли я использовать этот шаблон использования базового контроллера вообще или я должен делать это более эффективно / правильно?

Ответы [ 2 ]

11 голосов
/ 28 мая 2010

ваш конструктор BaseController должен быть таким

BacseConctoller(Info info)
{
    this.info = info
}

тогда для всего класса наследования их конструктор

ChildController(Info info):base(info)
{
}

в этом случае вы можете внедрить объект Info в базовый класс контроллера

1 голос
/ 31 мая 2010

Марк прав на деньги,

BaseClass(dependantObject object)
{
 Object = object;
}

чтобы выполнить зависящий от объекта объект, чтобы все подклассы могли получить доступ к базовому поведению, мы можем использовать инъекцию в подкласс и просто связать базовый конструктор с передачей нашего объекта Ninjected.

 SubClass() : this(null) {}

 SubClass(dependantObject object) : base(object)
  {

  }

счастливого кодирования!

...