Mi pregunta es la siguiente: Tengo un controlador base (controlador ASP.Net MVC) llamado ApplicationController, y quiero que todo mi controlador herede de él. este controlador base tiene una propiedad ILogger, marcada con un atributo [Dependencia]. (sí, sé que debería usar inyección de constructor, solo tengo curiosidad sobre este atributo).Unity [dependencia] inyección y Herencia
Creé el contenedor, registré los tipos, cambié la fábrica por defecto, todo está bien. el problema es que cuando trato de usar mi propiedad Logger en el controlador derivado, no se resuelve.
¿Qué estoy haciendo mal? ¿Por qué el contenedor no resuelve las dependencias de la clase base al crear el controlador derivado?
ejemplos de código:
ApplicationController:
public class ApplicationController : Controller
{
[Dependency]
protected ILogger _logger { get; set; }
}
controlador derivado:
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();
}
}
Unidad fábrica controlador:
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 muestra:
Soy bastante nuevo a la unidad, así que tal vez hice algo mal.
gracias, Ami.
¿Funciona esto para el controlador de aplicaciones? –
¿Conseguiste que esto funcionara alguna vez? Mi código es casi idéntico y tampoco puedo resolver el controlador base. ¿Nadie? –
Ray: funcionó después de hacer públicas las propiedades. ese es un precio que tiene que pagar para que funcione Unity. – Ami