Wednesday, May 29, 2024

ILogger

 using Autofac;

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.Mvc;

using Autofac.Integration.Mvc;

using System.Data.SqlClient;

using System.Data;

using Microsoft.Extensions.Configuration;

using Microsoft.Extensions.Configuration.Xml;

using Autofac.Configuration;

using ICS360.Helper;

using ICS360.Repository;

using ICS360.Repository.IRepository;

using ICS360.Utilities;

using NLog.Extensions.Logging;

using Microsoft.Extensions.Logging;

using NLog;

using Microsoft.Extensions.DependencyInjection;

using Autofac.Extensions.DependencyInjection;


namespace ICS360.App_Start

{

    public class BuilderConfig

    {

        /// <summary>

        /// For more info see 

        /// :https://code.google.com/p/autofac/wiki/MvcIntegration (mvc4 instructions)

        /// </summary>

        public static void RegisterDependencies()

        {

            #region Create the builder

            var builder = new ContainerBuilder();

            #endregion


            #region Setup a common pattern

            // placed here before RegisterControllers as last one wins

            builder.RegisterType<UserRepository>().As<IUserRepository>().InstancePerRequest();

            builder.RegisterType<ConfigurationData>().As<IConfigurationData>().InstancePerLifetimeScope();

            builder.RegisterType<SessionContext>().As<ISessionContext>().InstancePerLifetimeScope();

            builder.RegisterType<NLogLoggerFactory>().As<ILoggerFactory>().SingleInstance();

            builder.RegisterGeneric(typeof(Logger<>))

                    .As(typeof(ILogger<>))

                    .SingleInstance();

            #endregion



            #region Register all controllers for the assembly

            // Note that ASP.NET MVC requests controllers by their concrete types, 

            // so registering them As<IController>() is incorrect. 

            // Also, if you register controllers manually and choose to specify 

            // lifetimes, you must register them as InstancePerDependency() or 

            // InstancePerHttpRequest() - ASP.NET MVC will throw an exception if 

            // you try to reuse a controller instance for multiple requests. 

            builder.RegisterControllers(typeof(MvcApplication).Assembly)

                   .InstancePerRequest();


            #endregion


            #region Register modules

            builder.RegisterAssemblyModules(typeof(MvcApplication).Assembly);

            #endregion


            #region Model binder providers - excluded - not sure if need

            //builder.RegisterModelBinders(Assembly.GetExecutingAssembly());

            //builder.RegisterModelBinderProvider();

            #endregion


            #region Inject HTTP Abstractions

            /*

             The MVC Integration includes an Autofac module that will add HTTP request 

             lifetime scoped registrations for the HTTP abstraction classes. The 

             following abstract classes are included: 

            -- HttpContextBase 

            -- HttpRequestBase 

            -- HttpResponseBase 

            -- HttpServerUtilityBase 

            -- HttpSessionStateBase 

            -- HttpApplicationStateBase 

            -- HttpBrowserCapabilitiesBase 

            -- HttpCachePolicyBase 

            -- VirtualPathProvider 


            To use these abstractions add the AutofacWebTypesModule to the container 

            using the standard RegisterModule method. 

            */

            builder.RegisterModule<AutofacWebTypesModule>();


            #endregion


            #region Set the MVC dependency resolver to use Autofac

            var container = builder.Build();

            IServiceProvider serviceProvider = new AutofacServiceProvider(container);

            var loggerFactory = serviceProvider.GetRequiredService<ILoggerFactory>();

            loggerFactory.AddNLog();

            DependencyResolver.SetResolver(new AutofacDependencyResolver(container));

            #endregion


        }

    }




}

No comments:

Post a Comment