У меня есть следующий код:
public abstract class BaseController : Controller
{
public IUserService UserService { get; set; }
}
Все мои контроллеры наследуются от этого базового контроллера.Я начал с настройки его в Ninject, используя следующий код:
kernel.Bind<BaseController>()
.ToSelf()
.WithPropertyValue("UserService", x => x.Kernel.GetService(typeof(IUserService)));
Это не сработало.Я предполагаю, что это из-за того, что BaseController является абстрактным классом (пожалуйста, подтвердите мое предположение).Поэтому я перешел к изменению конфигурации:
kernel.Bind<HomeController>()
.ToSelf()
.WithPropertyValue("UserService", x => x.Kernel.GetService(typeof(IUserService)));
Это работает.Незначительным недостатком является то, что теперь мне приходится настраивать каждый контроллер одинаково.
Поскольку у меня также есть настройка DependencyResolver в моем проекте ASP.NET MVC 3, я также мог удалить вышеуказанную конфигурацию Ninject и изменить свой базовый контроллер навыглядят так:
public IUserService UserService
{
get
{
return DependencyResolver.Current.GetService<IUserService>();
}
}
Есть ли какая-либо польза от использования плавной конфигурации по сравнению с использованием подхода DependencyResolver?Один лучше другого?Какой подход будет считаться лучшей практикой?
Стоит отметить, что я не хотел внедрять конструктор в мой базовый контроллер.