Мой вопрос таков:
У меня есть базовый контроллер (контроллер ASP.Net MVC) под названием ApplicationController, и я хочу, чтобы все мои контроллеры наследовали от него. этот базовый контроллер имеет свойство ILogger, помеченное атрибутом [Dependency]. (да, я знаю, что должен использовать инжектор конструктора, мне просто любопытно этот атрибут).
Я создал контейнер, зарегистрировал типы, изменил фабрику по умолчанию, все в порядке. проблема в том, что когда я пытаюсь использовать свое свойство Logger в производном контроллере, оно не разрешается.
что я делаю не так? почему контейнер не разрешает зависимости базового класса при создании производного контроллера?
образцы кода:
ApplicationController:
public class ApplicationController : Controller
{
[Dependency]
protected ILogger _logger { get; set; }
}
производный контроллер:
public class HomeController : ApplicationController
{
public HomeController()
{
}
public ActionResult Index()
{
_logger.Log("Home controller constructor started.");
ViewData["Message"] = "Welcome to ASP.NET MVC!";
return View();
}
public ActionResult About()
{
return View();
}
}
Фабрика контроллеров Unity:
public class UnityControllerFactory : DefaultControllerFactory
{
private readonly IUnityContainer _container;
public UnityControllerFactory(IUnityContainer container)
{
_container = container;
}
protected override IController GetControllerInstance(Type controllerType)
{
return _container.Resolve(controllerType) as IController;
}
}
Пример Global.asax.cs:
protected void Application_Start()
{
_container = new UnityContainer();
_container.RegisterType<ILogger, Logger.Logger>();
UnityControllerFactory factory = new UnityControllerFactory(_container);
ControllerBuilder.Current.SetControllerFactory(factory);
RegisterRoutes(RouteTable.Routes);
}
Я довольно новичок в Unity, поэтому, возможно, я сделал что-то не так.
спасибо,
Ами.