public static void ConfigureContainer()
{
var builder = new ContainerBuilder();
//HTTP context and other related stuff
builder.Register(c =>
//register FakeHttpContext when HttpContext is not available
HttpContext.Current != null ?
(new HttpContextWrapper(HttpContext.Current) as HttpContextBase) :
(new FakeHttpContext("~/") as HttpContextBase))
.As<HttpContextBase>()
.InstancePerLifetimeScope();
builder.Register(c => c.Resolve<HttpContextBase>().Request)
.As<HttpRequestBase>()
.InstancePerLifetimeScope();
builder.Register(c => c.Resolve<HttpContextBase>().Response)
.As<HttpResponseBase>()
.InstancePerLifetimeScope();
builder.Register(c => c.Resolve<HttpContextBase>().Server)
.As<HttpServerUtilityBase>()
.InstancePerLifetimeScope();
builder.Register(c => c.Resolve<HttpContextBase>().Session)
.As<HttpSessionStateBase>()
.InstancePerLifetimeScope();
//web helper
builder.RegisterType<WebHelper>().As<IWebHelper>().InstancePerLifetimeScope();
// Register dependencies in controllers
builder.RegisterControllers(typeof(MvcApplication).Assembly);
// Register dependencies in filter attributes
builder.RegisterFilterProvider();
// Register dependencies in custom views
builder.RegisterSource(new ViewRegistrationSource());
// Register our Data dependencies
// http://www.codeproject.com/Articles/808894/IoC-in-ASP-NET-MVC-using-Autofac
// http://michaelfarag.blogspot.in/2013/10/step-by-step-guide-mvc-4-entity.html
// http://www.codeproject.com/Articles/690391/Dependency-Injection-Pattern-with-Autofac
//builder.RegisterModule(new DataModule("MVCWithAutofacDB"));
// builder.RegisterType<EGSWDBEntities>().InstancePerRequest();
builder.Register<IDbContext>(c => new EGSWDBContext("name=EGSWDBEntities")).InstancePerLifetimeScope();
builder.RegisterGeneric(typeof(EfRepository<>)).As(typeof(IRepository<>)).InstancePerLifetimeScope();
//web helper
builder.RegisterType<WebHelper>().As<IWebHelper>().InstancePerLifetimeScope();
//work context
builder.RegisterType<WebWorkContext>().As<IWorkContext>().InstancePerLifetimeScope();
//services
builder.RegisterType<CustomerService>().As<ICustomerService>().InstancePerLifetimeScope();
builder.RegisterType<AddressService>().As<IAddressService>().InstancePerLifetimeScope();
builder.RegisterType<ZipCodeService>().As<IZipCodeService>().InstancePerLifetimeScope();
builder.RegisterType<WorkflowMessageService>().As<IWorkflowMessageService>().InstancePerLifetimeScope();
builder.RegisterType<UserAgentHelper>().As<IUserAgentHelper>().InstancePerLifetimeScope();
builder.RegisterType<FormsAuthenticationService>().As<IAuthenticationService>().InstancePerLifetimeScope();
builder.RegisterType<QuestionAnswerEntityData>().As<IQuestionAnswerEntityData>().InstancePerLifetimeScope();
builder.RegisterType<OrderService>().As<IOrderService>().InstancePerLifetimeScope();
builder.RegisterType<PermissionService>().As<IPermissionService>().InstancePerLifetimeScope();
builder.RegisterType<PayPalDirectPaymentProcessor>().As<IPaymentMethod>().InstancePerLifetimeScope();
builder.RegisterType<DateTimeHelper>().As<IDateTimeHelper>().InstancePerLifetimeScope();
builder.RegisterType<SeoUrlService>().As<ISeoUrlService>().InstancePerLifetimeScope();
builder.RegisterType<ServiceRequestService>().As<IServiceRequestService>().InstancePerLifetimeScope();
//builder.RegisterType<UserAgentHelper>().As<IUserAgentHelper>().InstancePerLifetimeScope();
var container = builder.Build();
// Set MVC DI resolver to use our Autofac container
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
}