В ваших дочерних контроллерах убедитесь, что вы определили конструктор с теми же параметрами, что и ваш базовый класс:
public class FooController: BaseController
{
public FooController(ITenantRepository repository): base(repository)
{
}
...
}
Это необходимо сделать, потому что в базовом классе вы удалили конструктор без параметров и заменили его на пользовательский. Таким образом, производные классы также должны быть удалены из их конструктора без параметров.
Также обратите внимание, что обычный способ использования Ninject с ASP.NET MVC - установить его как DependencyResolver
на верхнем уровне вашего приложения. Контроллеры не должны использовать какие-либо специфичные для контейнера атрибуты, такие как атрибут [Inject]
, который вы использовали, поскольку они привязывают ваш код к используемому вами контейнеру внедрения зависимостей.
Также обратите внимание, что в дополнение к плохой практике с предыдущей точки зрения атрибут [Inject]
в конструкторе в вашем коде не оказывает существенного влияния:
- Ничто не собирается вмешиваться и говорить: «Смотри, у него есть атрибут, нам лучше предоставить его зависимости»
- Если вы настроили Ninject как DependencyResolver, ему не понадобится атрибут, поскольку нет никакой двусмысленности относительно того, что необходимо для создания контроллера.
- нет конструктора по умолчанию
- нет конкурирующего конструктора