Я пытаюсь добавить Ninject к следующей настройке -Как создать базовый класс, который принимает параметры для контроллеров без изменения дочерних контроллеров?
public class BaseController : Controller
{
protected ILogger Logger {get;}
public BaseController() { Logger = new MyLogger(); }
}
public class Controller1Controller : BaseController { ... }
public class Controller2Controller : BaseController { ... }
....
public class ControllerNController : BaseController { ... }
С Ninject, добавив параметр ILogger к BaseController отлично работает -
public class BaseController : Controller
{
protected ILogger Logger {get;}
public BaseController(ILogger logger) { Logger = logger; }
}
но теперь она также требует добавления конструктора в каждом дочерних контроллеров, поскольку базовый класс больше не имеет конструктора без параметров.
public class Controller1Controller : BaseController {
public Controller1Controller(ILogger logger) : base(logger) { }
}
Существует более 50 дочерних контроллеров и d в будущем это может стать проблемой для обслуживания, если нам нужно добавить/удалить больше зависимостей. Кроме того, код, добавляемый к каждому контроллеру, точно такой же.
Есть ли способ держать дочерние контроллеры такими, какие они есть (без каких-либо конструкторов), но все же внести это изменение в BaseController?
Используйте инструмент рефакторинга как [ReSharper] (https://www.jetbrains.com/resharper/). –
Возможный дубликат [Вопросы об использовании Ninject] (http://stackoverflow.com/questions/36221865/questions-about-using-ninject) – NightOwl888