Mit Autofac zu injizieren log4net in die Steuerung

Versuchen mit Autofac zu injizieren log4net-Klasse in meinem controller, aber ich bekomme die folgende exception:

Keiner der Konstrukteure gefunden, die mit 'Public binding-flags' auf
Typ 'MvcApplication6.Controller.HomeController "kann aufgerufen werden, mit der die verfügbaren Dienste und Parameter: Nicht beheben können parameter" log4net.ILog Datenlogger' Konstruktor 'Void .ctor(log4net.ILog)'.

Habe ich erstellt ein Modul zum einfügen des Log Klasse mit dem korrekten Typ:

public class LogInjectionModule : Module
{
    protected override void AttachToComponentRegistration(IComponentRegistry registry, IComponentRegistration registration)
    {
         registration.Preparing += OnComponentPreparing;
    }

    static void OnComponentPreparing(object sender, PreparingEventArgs e)
    {
        var t = e.Component.Activator.LimitType;
        e.Parameters = e.Parameters.Union(new[] 
        { 
            new ResolvedParameter((p, i) => p.ParameterType == typeof(ILog), (p, i) => LogManager.GetLogger(t)) 
        });
    }
}

Ich dann registrieren Sie das Modul in meinem ASP.NET MVC Application_Start Methode:

protected void Application_Start()
{
     ContainerBuilder builder = new ContainerBuilder();
     builder.RegisterControllers(typeof (MvcApplication).Assembly) ;

     var container = builder.Build() ;
     DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); 

     builder.RegisterModule(new LogInjectionModule());

     AreaRegistration.RegisterAllAreas();

     RegisterGlobalFilters(GlobalFilters.Filters);
     RegisterRoutes(RouteTable.Routes);
}

Ich habe eine constuctor an die Steuerung, die dauert eine ILog als parameter:

namespace MvcApplication6.Controllers
{
   public class HomeController : Controller
   {
      ILog _log;

      public HomeController(ILog logger) 
      {
         _log = logger;
      }

      public ActionResult Index()
      {
         ViewBag.Message = "Welcome to ASP.NET MVC!";

         _log.Info("Log message from Index()");

         return View();
      }

      public ActionResult About()
      {
         _log.Info("Log message from About()");

         return View();
      }
   }
}

Ich bin sicher, dass ich verpasst haben, ein Schritt, so dass jede Hilfe wäre sehr geschätzt.

InformationsquelleAutor RichardG | 2011-07-30
Schreibe einen Kommentar