La mia domanda è la seguente: Ho un controller di base (controller ASP.Net MVC) chiamato ApplicationController, e voglio che tutto il mio controller erediti da esso. questo controller di base ha una proprietà ILogger, contrassegnata con un attributo [Dependency]. (sì, so che dovrei usare l'iniezione del costruttore, sono solo curioso di questo attributo).Unity [dipendenza] iniezione ed Eredità
Ho creato il contenitore, i tipi registrati, modificato la fabbrica predefinita, tutto è a posto. il problema è che quando provo ad usare la mia proprietà Logger nel controller derivato, non è risolto.
cosa sto facendo di sbagliato? perché il contenitore non risolve le dipendenze della classe base durante la creazione del controller derivato?
esempi di codice:
ApplicationController:
public class ApplicationController : Controller
{
[Dependency]
protected ILogger _logger { get; set; }
}
regolatore derivato:
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();
}
}
Unità di controllo di fabbrica:
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 campione:
Sono abbastanza nuovo per l'Unità, quindi forse ho fatto qualcosa di sbagliato.
grazie, Ami.
Funziona per il controller dell'applicazione? –
Hai mai funzionato? Il mio codice è quasi identico e non riesco a risolvere neanche il controller di base. Chiunque? –
Ray: ha funzionato dopo aver reso pubbliche le proprietà. questo è un prezzo che devi pagare per far lavorare Unity. – Ami