Blog Archive

Monday, July 2, 2012

Using AutoFac IocContainer to inject Log4Net into MVC3

Nugget AutoFac, AutoFac.MVC3 and Log4Net into a MVC3 project

Create a Module to register

    public class ApplicationModule : Module
    {
        protected override void Load(ContainerBuilder builder)
        {
           // builder.RegisterInstance(LogManager.GetLogger("TheInstance"));
           
        }
        protected override void AttachToComponentRegistration(Autofac.Core.IComponentRegistry componentRegistry, Autofac.Core.IComponentRegistration registration)
        {
           
            registration.Preparing += registration_Preparing;
        }

        static void registration_Preparing(object sender, Autofac.Core.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))  
                }
                );
        }
    }



Create Container, Register, Build and setResolver


       protected void Application_Start()
        {
           ...

            var builder = new ContainerBuilder();
            builder.RegisterControllers(typeof(MvcApplication).Assembly);//Assembly.GetExecutingAssembly());
            builder.RegisterModule(new ApplicationModule());
            var container = builder.Build();
            DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
        }

Inject into COnstructor

  public class HomeController : Controller
    {

        public HomeController(ILog log)
        {

No comments: