public static IComponentContext RegisterDependancies()
        {
            var builder = new ContainerBuilder();

            // register dependency
            builder.RegisterType <PromactErpContext>().As <DbContext>();
            builder.RegisterType <ApplicationUserStore>().As <IUserStore <ApplicationUser> >();
            builder.RegisterType <ApplicationUserManager>().AsSelf();
            builder.RegisterType <ApplicationSignInManager>().AsSelf();

            builder.Register <IAuthenticationManager>(c => HttpContext.Current.GetOwinContext().Authentication);
            // register webapi controller
            builder.RegisterApiControllers(typeof(OAuthController).Assembly);

            // register mvc controller
            builder.RegisterControllers(typeof(HomeController).Assembly);

            // register webapi controller
            builder.RegisterApiControllers(typeof(LeaveRequestController).Assembly);
            builder.RegisterApiControllers(typeof(LeaveReportController).Assembly);
            builder.RegisterApiControllers(typeof(ScrumReportController).Assembly);
            builder.RegisterApiControllers(typeof(GroupController).Assembly);

            // register repositories
            builder.RegisterGeneric(typeof(Repository <>)).As(typeof(IRepository <>));
            builder.RegisterType <LeaveRequestRepository>().As <ILeaveRequestRepository>();
            builder.RegisterType <SlackRepository>().As <ISlackRepository>();
            builder.RegisterType <ScrumBotRepository>().As <IScrumBotRepository>();
            builder.RegisterType <ScrumSetUpRepository>().As <IScrumSetUpRepository>();
            builder.RegisterType <StringConstantRepository>().As <IStringConstantRepository>();
            builder.RegisterType <Client>().As <IClient>();
            builder.RegisterType <Bot>().AsSelf();
            builder.RegisterType <OauthCallsRepository>().As <IOauthCallsRepository>();
            builder.RegisterType <Util.Email.EmailService>().As <IEmailService>();
            builder.RegisterType <AttachmentRepository>().As <IAttachmentRepository>();
            builder.RegisterType <ServiceRepository>().As <IServiceRepository>();
            builder.RegisterType <HttpClient>().InstancePerDependency();
            builder.RegisterType <HttpClientService>().As <IHttpClientService>();
            builder.RegisterType <LeaveReportRepository>().As <ILeaveReportRepository>();
            builder.RegisterType <TaskMailRepository>().As <ITaskMailRepository>();
            builder.RegisterType <SlackUserRepository>().As <ISlackUserRepository>();
            builder.RegisterType <BotQuestionRepository>().As <IBotQuestionRepository>();
            builder.RegisterType <OAuthLoginRepository>().As <IOAuthLoginRepository>();
            builder.RegisterType <SlackChannelRepository>().As <ISlackChannelRepository>();
            builder.RegisterType <ScrumReportRepository>().As <IScrumReportRepository>();
            builder.RegisterType <EnvironmentVariableRepository>().As <IEnvironmentVariableRepository>();
            builder.RegisterType <EmailServiceTemplateRepository>().As <IEmailServiceTemplateRepository>();
            builder.RegisterType <OauthCallHttpContextRespository>().As <IOauthCallHttpContextRespository>();
            builder.RegisterType <TaskMailReportRepository>().As <ITaskMailReportRepository>();
            builder.RegisterType <GroupRepository>().As <IGroupRepository>();
            builder.RegisterType <MailSettingRepository>().As <IMailSettingRepository>();
            builder.RegisterType <Md5Service>().As <IMd5Service>();
            builder.RegisterType <MailSettingDetailsByProjectAndModuleRepository>().As <IMailSettingDetailsByProjectAndModuleRepository>();
            builder.RegisterType <RedmineRepository>().As <IRedmineRepository>();

            builder.RegisterModule <AutofacWebTypesModule>();
            builder.RegisterModule <NLogModule>();
            builder.RegisterModule <SimpleNLogModule>();
            builder.Register(x => AutoMapperConfiguration.ConfigureMap()).As <IMapper>().SingleInstance();
            var container = builder.Build();

            // replace mvc dependancy resolver with autofac
            DependencyResolver.SetResolver(new AutofacDependencyResolver(container));

            // replace webapi dependancy resolver with autofac
            GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container);

            return(container);
        }
        public static IComponentContext RegisterDependancies()
        {
            var builder     = new ContainerBuilder();
            var dataContext = new PromactErpContext(DbConnectionFactory.CreateTransient());

            builder.RegisterInstance(dataContext).As <DbContext>().SingleInstance();
            var httpClientMock       = new Mock <IHttpClientService>();
            var httpClientMockObject = httpClientMock.Object;

            builder.RegisterInstance(httpClientMock).As <Mock <IHttpClientService> >();
            builder.RegisterInstance(httpClientMockObject).As <IHttpClientService>();
            builder.RegisterType <ApplicationUserStore>().As <IUserStore <ApplicationUser> >();
            builder.RegisterType <ApplicationUserManager>().AsSelf();
            builder.RegisterType <ApplicationSignInManager>().AsSelf();

            builder.RegisterType <EnvironmentVariableTestRepository>().As <IEnvironmentVariableRepository>();
            builder.Register <IAuthenticationManager>(c => HttpContext.Current.GetOwinContext().Authentication);
            builder.RegisterGeneric(typeof(Repository <>)).As(typeof(IRepository <>));
            builder.RegisterType <LeaveRequestRepository>().As <ILeaveRequestRepository>();
            builder.RegisterType <ScrumBotRepository>().As <IScrumBotRepository>();
            builder.RegisterType <ScrumSetUpRepository>().As <IScrumSetUpRepository>();
            builder.RegisterType <LeaveReportRepository>().As <ILeaveReportRepository>();
            builder.RegisterType <ScrumReportRepository>().As <IScrumReportRepository>();
            builder.RegisterType <OAuthLoginRepository>().As <IOAuthLoginRepository>();
            builder.RegisterType <Client>().As <IClient>();
            builder.RegisterType <OauthCallsRepository>().As <IOauthCallsRepository>();
            builder.RegisterType <SlackRepository>().As <ISlackRepository>();
            builder.RegisterType <AttachmentRepository>().As <IAttachmentRepository>();
            builder.RegisterType <SlackUserRepository>().As <ISlackUserRepository>();
            builder.RegisterType <StringConstantRepository>().As <IStringConstantRepository>();
            builder.RegisterType <SlackChannelRepository>().As <ISlackChannelRepository>();
            builder.RegisterType <TaskMailRepository>().As <ITaskMailRepository>();
            builder.RegisterType <BotQuestionRepository>().As <IBotQuestionRepository>();
            builder.RegisterType <ServiceRepository>().As <IServiceRepository>();
            builder.RegisterType <OauthCallHttpContextRespository>().As <IOauthCallHttpContextRespository>();
            builder.RegisterType <TaskMailReportRepository>().As <ITaskMailReportRepository>();
            builder.RegisterType <MailSettingRepository>().As <IMailSettingRepository>();
            var emailServiceMock       = new Mock <IEmailService>();
            var emailServiceMockObject = emailServiceMock.Object;

            builder.RegisterInstance(emailServiceMock).As <Mock <IEmailService> >();
            builder.RegisterInstance(emailServiceMockObject).As <IEmailService>();
            builder.RegisterType <EmailServiceTemplateRepository>().As <IEmailServiceTemplateRepository>();
            builder.RegisterType <GroupRepository>().As <IGroupRepository>();
            builder.RegisterType <MailSettingDetailsByProjectAndModuleRepository>().As <IMailSettingDetailsByProjectAndModuleRepository>();
            var iLoggerMock       = new Mock <ILogger>();
            var iLoggerMockObject = iLoggerMock.Object;

            builder.RegisterInstance(iLoggerMock).As <Mock <ILogger> >();
            builder.RegisterInstance(iLoggerMockObject).As <ILogger>();
            builder.Register(x => AutoMapperConfiguration.ConfigureMap()).As <IMapper>().SingleInstance();

            var mockServiceRepository       = new Mock <IServiceRepository>();
            var mockServiceRepositoryObject = mockServiceRepository.Object;

            builder.RegisterInstance(mockServiceRepository).As <Mock <IServiceRepository> >();
            builder.RegisterInstance(mockServiceRepositoryObject).As <IServiceRepository>();

            var httpContext       = new Mock <HttpContextBase>();
            var httpContextObject = httpContext.Object;

            builder.RegisterInstance(httpContext).As <Mock <HttpContextBase> >();
            builder.RegisterInstance(httpContextObject).As <HttpContextBase>();
            builder.RegisterType <RedmineRepository>().As <IRedmineRepository>();

            var container = builder.Build();

            return(container);
        }