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