Einheit [Abhängigkeit] Injektion und Vererbung

Meine Frage ist wie folgt:
Ich habe einen Basis-controller (ASP.Net MVC-controller) genannt ApplicationController, und ich will alle meine controller Erben. diese Basis-controller hat eine ILogger Eigentum, gekennzeichnet mit einem [Abhängigkeit] - Attribut. (ja, ich weiß, ich sollte verwenden constructor injection, ich bin nur neugierig auf dieses Attribut).

Habe ich den container, Typen registriert, geändert werden, die Werkseinstellung ist alles in Ordnung. das problem ist, dass wenn ich versuche, mit meiner Logger-Eigenschaft in der abgeleiteten controller, es nicht gelöst.

was mache ich falsch? der container nicht warum löst die base-Klasse von Abhängigkeiten beim erstellen der abgeleiteten controller?

code-Beispiele:


ApplicationController:

public class ApplicationController : Controller
{
    [Dependency]
    protected ILogger _logger { get; set; }

}

abgeleitet controller:

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();
    }
}

Einheit controller factory:

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 Beispiel:

protected void Application_Start()
    {
        _container = new UnityContainer();
        _container.RegisterType<ILogger, Logger.Logger>();
        UnityControllerFactory factory = new UnityControllerFactory(_container);
        ControllerBuilder.Current.SetControllerFactory(factory);

        RegisterRoutes(RouteTable.Routes);
    }

Ich bin ganz neu in der Einheit, also vielleicht habe ich etwas falsch gemacht.

Dank,
Ami.

  • Macht diese Arbeit für application-controller?
  • Hast du das jemals funktionieren? Mein code ist fast identisch und ich kann nicht das Basis-controller zu beheben entweder. Irgendjemand?
  • Ray - es funktionierte, nachdem Sie die Eigenschaften der öffentlichkeit. das ist ein Preis Sie müssen zahlen, um die Einheit zu arbeiten.
InformationsquelleAutor Ami | 2009-06-17
Schreibe einen Kommentar