private static void BenchStructureMap()
        {
            var services = new ServiceCollection();

            services.AddScoped <IValueProvider, ValueProvider>();
            services.AddLogging();

            var container = new StructureMap.Container();

            container.Configure(config =>
            {
                config.Scan(_ =>
                {
                    _.AssemblyContainingType(typeof(Program));
                    _.WithDefaultConventions();
                });
                config.Populate(services);
            });

            Launch("StructureMap", (i) =>
            {
                var valueProvider = container.GetInstance <IValueProvider>();
                valueProvider.GetValue(i);
            });
        }
        // This method gets called by the runtime. Use this method to add services to the container.
        public IServiceProvider ConfigureServices(IServiceCollection services)
        {
            services.AddCors(c =>
            {
                c.AddPolicy("AllowOrigin", options => options.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());
            });
            services.AddTransient <IMessageBuilder <TodoItem, TodoItemResponse>, TodoItemResponseBuilder>();
            services.AddTransient <ITodoItemsManager, TodoItemsManager>();
            services.AddTransient <ITodoItemsDao, TodoItemsDao>();
            services.AddDbContext <TodoContext>(opt =>
                                                { opt.UseSqlServer(Configuration.GetConnectionString("TodoDb")); });

            services.AddMvc();

            // Wire up StructureMap
            var container = new Container();

            container.Configure(config =>
            {
                config.Populate(services);
                config.For <IServiceLocator>().Singleton().Use(new StructureMapServiceLocator(container));
            });

            var registrar = new StructureMapRegistrar(container);

            registrar.Register <BaseRegistry>();

            return(new StructureMapServiceProvider(container));
        }
Example #3
0
        public static ContainerBuilderOptions <TTenant> WithStructureMapServiceCollection <TTenant>(this ContainerBuilderOptions <TTenant> options,
                                                                                                    Action <TTenant, IServiceCollection> configureTenant)
            where TTenant : class
        {
            // Set a func, that is only invoked when the ServiceProvider is required. This ensures it runs after all other configuration methods
            // which is important as other methods can still add new services to the servicecollection after this one is invoked and we
            // dont want them to be missed when populating the container.
            options.Builder.BuildServiceProvider = new Func <IServiceProvider>(() =>
            {
                var container = new StructureMap.Container();
                container.Populate(options.Builder.Services);

                container.Configure(_ =>
                                    _.For <ITenantContainerBuilder <TTenant> >()
                                    .Use(new StructureMapTenantContainerBuilder <TTenant>(container, (tenant, configurationExpression) =>
                {
                    var tenantServices = new ServiceCollection();
                    configureTenant(tenant, tenantServices);
                    configurationExpression.Populate(tenantServices);
                }))
                                    );

                // now configure nested container per tenant.
                return(container.GetInstance <IServiceProvider>());
            });

            return(options);
        }
        // This method gets called by the runtime. Use this method to add services to the container.
        public IServiceProvider ConfigureServices(IServiceCollection services)
        {
            services.AddCors(c =>
            {
                c.AddPolicy("AllowOrigin", options => options.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());
            });
            services.AddTransient <IMessageBuilder <VirtualCloset, VirtualClosetResponse>, VirtualClosetResponseBuilder>();
            services.AddTransient <IVirtualClosetDao, VirtualClosetDao>();
            services.AddTransient <ICategoryManager, CategoryManager>();
            services.AddTransient <IVirtualClosetManager, VirtualClosetManager>();
            services.AddDbContext <VirtualClosetContext>(opt =>
            {
                opt.UseSqlServer(Configuration.GetConnectionString("VirtualClosetDb"));
            });
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

            var container = new Container();

            container.Configure(config =>
            {
                config.Populate(services);
                config.For <IServiceLocator>().Singleton().Use(new StructureMapServiceLocator(container));
            });

            var registrar = new StructureMapRegistrar(container);

            registrar.Register <BaseRegistry>();

            return(new StructureMapServiceProvider(container));
        }
        public async Task Options_Configure_Child_Resolve_Child_Using_TenantContainerAdaptor()
        {
            ServiceCollection services = new ServiceCollection();

            services.AddLogging();

            //  ServiceProvider serviceProvider = services.BuildServiceProvider();


            StructureMap.Container container = new StructureMap.Container();
            Dotnettency.Container.StructureMap.ContainerExtensions.Populate(container, services);

            var adaptedContainer         = container.GetInstance <ITenantContainerAdaptor>();
            var containerEventsPublisher = container.TryGetInstance <ITenantContainerEventsPublisher <MyTenant> >();

            container.Configure(_ =>
                                _.For <ITenantContainerBuilder <MyTenant> >()
                                .Use(new TenantContainerBuilder <MyTenant>(services, adaptedContainer, (s, t) => {
                t.AddOptions();
                t.Configure <MyOptions>((a) =>
                {
                    a.Prop = true;
                });
            }, containerEventsPublisher))
                                );

            // container.Populate(services);

            var tenantContainerBuilder = adaptedContainer.GetRequiredService <ITenantContainerBuilder <MyTenant> >();
            var tenantContainer        = await tenantContainerBuilder.BuildAsync(new MyTenant());

            IOptions <MyOptions> options = tenantContainer.GetRequiredService <IOptions <MyOptions> >();

            Assert.True(options.Value?.Prop);
        }
        public void HttpClient()
        {
            var services = new ServiceCollection();

            services.AddHttpClient("client")
            .AddHttpMessageHandler <RequestContentMd5Handler>()
            .AddHttpMessageHandler <HmacSigningHandler>();

            var container = new StructureMap.Container();

            container.Configure(config =>
            {
                config.For <ISecretRepository>().Singleton().Use(new SecretStore());

                config.For <ISignatureCalculator>().Use <HmacSignatureCalculator>();
                config.For <IMessageRepresentationBuilder>().Use <HmacMessageRepresentationBuilder>();

                config.For <RequestContentMd5Handler>().Use <RequestContentMd5Handler>();
                config.For <HmacSigningHandler>().Use <HmacSigningHandler>();

                config.Populate(services);
            });

            var serviceProvider = container.GetInstance <IServiceProvider>();

            var factory = serviceProvider.GetService <IHttpClientFactory>();

            factory.CreateClient("client");
        }
        public static AdaptedContainerBuilderOptions <TTenant> WithStructureMap <TTenant>(this ContainerBuilderOptions <TTenant> options,
                                                                                          Action <TTenant, IServiceCollection> configureTenant)
            where TTenant : class
        {
            var adaptorFactory = new Func <ITenantContainerAdaptor>(() =>
            {
                // host level container.
                var container = new StructureMap.Container();
                container.Populate(options.Builder.Services);
                var adaptedContainer = container.GetInstance <ITenantContainerAdaptor>();
                // add ITenantContainerBuilder<TTenant> service to the host container
                // This service can be used to build a child container (adaptor) for a particular tenant, when required.
                container.Configure(_ =>
                                    _.For <ITenantContainerBuilder <TTenant> >()
                                    .Use(new TenantContainerBuilder <TTenant>(adaptedContainer, configureTenant))
                                    );

                var adaptor = container.GetInstance <ITenantContainerAdaptor>();
                return(adaptor);
            });

            var adapted = new AdaptedContainerBuilderOptions <TTenant>(options, adaptorFactory);

            options.Builder.Services.TryAddScoped((_) => adapted);

            return(adapted);
        }
Example #8
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public IServiceProvider ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext <ApplicationDbContext>(options =>
                                                         options.UseSqlite(Configuration.GetConnectionString("DefaultConnection_" + Helper.GetPlatform().ToString())));

            services.AddIdentity <ApplicationUser, IdentityRole>()
            .AddEntityFrameworkStores <ApplicationDbContext>()
            .AddDefaultTokenProviders();

            // Add application services.
            services.AddTransient <IEmailSender, EmailSender>();

            services.AddMvc();

            services.AddMvc().AddControllersAsServices();

            services.AddMvc()
            .AddSessionStateTempDataProvider()
            .AddJsonOptions(options =>
            {
                options.SerializerSettings.ContractResolver = new DefaultContractResolver();
                options.SerializerSettings.Converters.Add(new StringEnumConverter());
            });

            services.AddSession();

            var z = new Registry();

            z.Scan(x =>
            {
                x.TheCallingAssembly();
                x.Assembly("As.A4ACore");
                x.Assembly("As.Email");
                x.SingleImplementationsOfInterface();
                x.WithDefaultConventions();
            });

            var container = new StructureMap.Container();

            services.AddSingleton <Container>(container);

            container.Configure(config =>
            {
                config.Populate(services);
                config.AddRegistry(z);
                config.ForConcreteType <A4ARepository>().Configure.Ctor <string>("connectionString").Is(Configuration.GetConnectionString("MainLogic_" + Helper.GetPlatform().ToString()));
            });

            var loggerAdapter = container.GetInstance <A4ALogger>();

            L.SetExternalLogger(loggerAdapter, AsLogInfo.Info);



            return(container.GetInstance <IServiceProvider>());
        }
 public void Should_Remember_How_To_Work_With_SM()
 {
     using (StructureMap.Container container = new StructureMap.Container())
     {
         container.Configure(c =>
         {
             c.For<ILatLong>().Add<LatLong>();
         });
         Console.WriteLine(container.GetInstance<ILatLong>().GetType().Name);
     }
 }
        static StructureMapSingletonUseCase()
        {
            container = new StructureMap.Container();
            container.Configure(
                x => x.For <IWebService>()
                .Use <WebService>());

            container.Configure(
                x => x.For <IAuthenticator>().Singleton()
                .Use <Authenticator>());

            container.Configure(
                x => x.For <IStockQuote>().Singleton()
                .Use <StockQuote>());

            container.Configure(
                x => x.For <IDatabase>().Singleton()
                .Use <Database>());

            container.Configure(
                x => x.For <IErrorHandler>().Singleton()
                .Use <ErrorHandler>());

            container.Configure(
                x => x.For <ILogger>().Singleton()
                .Use(c => new Logger()));
        }
Example #11
0
        private IServiceProvider ConfigStructureMapDI(IServiceCollection services)
        {
            var container = new StructureMap.Container();

            container.Configure(config =>
            {
                config.For <IRequestIdFactory>().Use <RequestIdFactory>().Singleton();
                config.For <IRequestId>().Use <RequestId>().ContainerScoped();

                config.Populate(services);
            });

            return(container.GetInstance <IServiceProvider>());
        }
Example #12
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public IServiceProvider ConfigureServices(IServiceCollection services)
        {
            services.AddMvc().AddControllersAsServices();

            var container = new StructureMap.Container();

            container.Configure(config =>
            {
                config.Populate(services);
            });

            As.Client.InitializeClient.StartupAndRegisterClientServices(Configuration, container);
            return(container.GetInstance <IServiceProvider>());
        }
 /// <summary>
 /// 
 /// </summary>
 /// <returns></returns>
 public static IContainer Initialize()
 {
     var container = new StructureMap.Container();
     container.Configure(cfg =>
     {
         cfg.Scan(s =>
         {
             s.WithDefaultConventions();
             s.Assembly(Assembly.GetAssembly(typeof(BaseOperation<,>)));
             s.Assembly(Assembly.GetAssembly(typeof(BaseService<>)));
         });
         cfg.For<IKarinUnitOfWork>().Use<KarinContext>();
     });
     return container;
     //new Container(c => c.AddRegistry<DefaultRegistry>());
 }
        private IServiceProvider ConfigureIoc(IServiceCollection services)
        {
            var container = new StructureMap.Container();

            container.Configure(config =>
            {
                config.Scan(scanner =>
                {
                    scanner.AssemblyContainingType(typeof(Startup));
                    scanner.WithDefaultConventions();
                });

                config.Populate(services);
            });

            return(container.GetInstance <IServiceProvider>());
        }
Example #15
0
        public static IContainer Initialize()
        {
            var container = new StructureMap.Container();

            container.Configure(cfg =>
            {
                cfg.Scan(s =>
                {
                    s.WithDefaultConventions();
                    s.Assembly(Assembly.GetAssembly(typeof(BaseOperation <,>)));
                    s.Assembly(Assembly.GetAssembly(typeof(BaseService <>)));
                });
                cfg.For <IFiberUnitOfWork>().Use <FiberContext>();
            });

            return(container);
            //new Container(c => c.AddRegistry<DefaultRegistry>());
        }
        public void Options_Configure_Root_Resolve_Root()
        {
            // ServiceProvider serviceProvider = services.BuildServiceProvider();
            StructureMap.Container container = new StructureMap.Container();
            container.Configure((a) => {
                ServiceCollection services = new ServiceCollection();
                services.AddOptions();
                services.Configure <MyOptions>((b) =>
                {
                    b.Prop = true;
                });
                a.Populate(services);
            });

            // container.Populate(services);

            IServiceProvider     sp      = container.GetInstance <IServiceProvider>();
            IOptions <MyOptions> options = sp.GetRequiredService <IOptions <MyOptions> >();

            Assert.True(options.Value?.Prop);
        }
        private IServiceProvider ConfigureStructureMap(IServiceCollection services)
        {
            var container = new StructureMap.Container();

            container.Configure(config =>
            {
                // Register stuff in container, using the StructureMap APIs...
                config.Scan(_ =>
                {
                    // Automatically register services that follow default conventions, e.g.
                    // PurchasingService/IPurchasingService
                    // ConcreteService (concrete types can always be resolved)
                    // Typically, you will have a lot of Service/IService pairs in your app
                    _.AssemblyContainingType(typeof(Startup));
                    _.WithDefaultConventions();
                    // Register all of the implementations of IGamingService
                    // CrosswordService
                    // SudokuService
                    _.AddAllTypesOf <IGamingService>();
                    // Register all non-generic implementations of IValidatior<T> (UserModelValidator)
                    _.ConnectImplementationsToTypesClosing(typeof(IValidator <>));
                });

                // When a ILeaderboard<T> is requested, use Leaderboard<T>
                config.For(typeof(ILeaderboard <>)).Use(typeof(Leaderboard <>));
                // When an IUnitOfWork<T> is requested, run the lambda
                // Also, has a "scoped" lifetime, instead of the default "transient" lifetime
                config.For <IUnitOfWork>().Use(_ => new UnitOfWork(3)).ContainerScoped();
                // For a given T, when an IValidator<T> is requested,
                // but there are no non-generic implementations of IValidator<T>
                // Use DefaultValidator<T> instead
                config.For(typeof(IValidator <>)).Add(typeof(DefaultValidator <>));

                //Populate the container using the service collection
                config.Populate(services);
            });

            //Return the IServiceProvider. This tells ASP.NET Core to use StructureMap to resolve dependencies
            return(container.GetInstance <IServiceProvider>());
        }
Example #18
0
        public IServiceProvider ConfigureIoC(IServiceCollection services)
        {
            var container = new StructureMap.Container();

            container.Configure(config =>
            {
                // Register stuff in container, using the StructureMap APIs...
                config.Scan(_ =>
                {
                    _.AssemblyContainingType(typeof(Startup));
                    _.WithDefaultConventions();
                    _.AddAllTypesOf <IPhotoService>();
                    _.AddAllTypesOf <IAlbumService>();
                });
                services.AddScoped <IPhotoService, PhotoService>();
                services.AddScoped <IAlbumService, AlbumService>();
                services.Add(ServiceDescriptor.Transient(typeof(IRepository <>), typeof(Repository <>)));

                //Populate the container using the service collection
                config.Populate(services);
            });

            return(container.GetInstance <IServiceProvider>());
        }
Example #19
0
        private static void ConfigureServices(IServiceCollection services)
        {
            Log.Logger = new LoggerConfiguration()
                         .WriteTo.Console()
                         .CreateLogger();

            services
            .AddLogging(configure => configure.AddSerilog());

            // add StructureMap
            var container = new StructureMap.Container();

            container.Configure(config =>
            {
                // Register stuff in container, using the StructureMap APIs...
                config.Scan(_ =>
                {
                    _.AssemblyContainingType(typeof(Program));
                    _.WithDefaultConventions();
                });
                // Populate the container using the service collection
                config.Populate(services);
            });
        }
Example #20
0
        public static void Main(string[] args)
        {
            LogConfig.Init();
            // add the framework services
            var services = new ServiceCollection();

            services.AddSingleton <IMapperFactory, TriviaMapperFactory>();

            // add StructureMap
            var container = new StructureMap.Container();

            container.Configure(config =>
            {
                // Register stuff in container, using the StructureMap APIs...
                config.Scan(_ =>
                {
                    _.AssemblyContainingType(typeof(Program));
                    _.WithDefaultConventions();
                });
                // Populate the container using the service collection
                config.Populate(services);
            });

            var serviceProvider = container.GetInstance <IServiceProvider>();

            Application.Init();

            var operativeServices  = serviceProvider.GetService <IOperativeServices>();
            var backOfficeServices = serviceProvider.GetService <IBackOfficeServices>();

            TriviaApp   triviaApp   = new TriviaApp(operativeServices, backOfficeServices);
            LogInDialog logInDialog = new LogInDialog(triviaApp);

            logInDialog.Show();
            Application.Run();
        }
Example #21
0
        public void RegisterFactory <TResult>(Func <TResult> factory, RegistrationMode mode, RegistrationLifestyle lifestyle) where TResult : class
        {
            var lifecycle = GetLifecycle(lifestyle);

            _container.Configure(r => r.For <TResult>(lifecycle).Use(() => factory()));
        }
Example #22
0
        static void Main(string[] args)
        {
            // REGISTRATION
            var container = new Container();

            // Register MasterCard conrete type to ICreditCard
            container.Configure(x => x.For <ICreditCard>().Use <MasterCard>());

            // Shopper class has ICreditCard in it's constructor
            // IoC will automatically get concrete type to MasterCard
            var shopper = container.GetInstance <Shopper>();

            shopper.Charge();

            // LIFECYCLE
            // Default lifecycle is "PerRequest"
            // Specify your own this way
            container.Configure(x => x.For <ICreditCard>().LifecycleIs(new SingletonLifecycle()));

            // FEATURES
            // TryGet => see if available => returns null if ICreditCard is NOT registered
            container.TryGetInstance <ICreditCard>();

            // Debugging => will show you what you have in container
            Console.WriteLine(container.WhatDoIHave());



            sContainer = new Container();
            sContainer.Configure(x => x.For <ICreditCard>().Use <MasterCard>());


            // Put registration into one registry class
            container = new Container(new MyRegistry());

            // Testing named instance
            var classA = container.GetInstance <ClassA>();
            var classB = container.GetInstance <ClassB>();

            //var c = new StructureMap.Container(ce =>
            //{
            //    ce.ForRequestedType<ICreditCard>().TheDefaultIsConcreteType<VisaCard>();
            //});
            //var test = c.GetInstance<ICreditCard>();

            //var mock = new Mock<Container>();
            //var t1 = mock.Setup(x => x.GetInstance<ICreditCard>()).Returns(new VisaCard());

            //IoC.Initialize();
            //var ccc = IoC.container.GetInstance<ICreditCard>();

            var mock = new Mock <IContainer>();
            var tt   = mock.Object;

            mock.Setup(x => x.GetInstance <ICreditCard>()).Returns(new MasterCard());
            //var tt2 = mock.Object.GetInstance<ICreditCard>();

            var worker = new Worker();

            worker.Work(mock.Object);

            var m = new Mock <HttpContextBase>();
            //var t2 = m.Setup(x => x.Request).Returns();
        }
Example #23
0
 public Container()
 {
     _container = new StructureMap.Container();
     _container.Configure(x => x.For <IObjectFactory>().Use(this));
 }
Example #24
0
 private static IContainer InitContainer()
 {
     RRTracer.Trace("Initializing container");
     var initContainer = new StructureMap.Container();
     initContainer.Configure(x =>
                                 {
                                     x.For<IResourceType>().OnCreationForAll((c, r) =>
                                     {
                                         if (!r.FileName.Contains("RequestReduce"))
                                             throw new System.InvalidOperationException ("ResourceType file names must contain the string 'RequestReduce'");
                                     });
                                     x.For<IReducingQueue>().Singleton().Use<ReducingQueue>();
                                     x.For<IReductionRepository>().Singleton().Use<ReductionRepository>();
                                     x.For<IWuQuantizer>().Singleton().Use<WuQuantizer>();
                                     x.For<LocalDiskStore>().Singleton();
                                     x.For<DbDiskCache>().Singleton();
                                     x.For<SqlServerStore>().LifecycleIs(new RRHybridLifecycle()).Use<SqlServerStore>().
                                         Ctor<IStore>().Is(y => y.GetInstance<DbDiskCache>());
                                     x.For<IFileRepository>().Use<FileRepository>();
                                     x.For<IStore>().Use(y =>
                                                             {
                                                                 switch (
                                                                     y.GetInstance<IRRConfiguration>().
                                                                         ContentStore)
                                                                 {
                                                                     case
                                                                         Configuration.Store.
                                                                             SqlServerStore:
                                                                         return
                                                                             y.GetInstance
                                                                                 <SqlServerStore>();
                                                                     case
                                                                         Configuration.Store.
                                                                             LocalDiskStore:
                                                                     default:
                                                                         return
                                                                             y.GetInstance
                                                                                 <LocalDiskStore>();
                                                                 }
                                                             });
                                     x.For<HttpContextBase>().Use(() => HttpContext.Current == null ? null : new HttpContextWrapper(HttpContext.Current));
                                 });
     initContainer.Configure(x => x.Scan(y =>
                                             {
                                                 y.Assembly("RequestReduce");
                                                 y.ExcludeNamespace("RequestReduce.Utilities");
                                                 y.ExcludeNamespace("RequestReduce.Configuration");
                                                 y.ExcludeNamespace("RequestReduce.Store");
                                                 y.ExcludeNamespace("RequestReduce.ResourceTypes");
                                                 y.ExcludeType<IReductionRepository>();
                                                 y.ExcludeType<IReducingQueue>();
                                                 y.AddAllTypesOf<IReducer>();
                                                 y.WithDefaultConventions();
                                             }
                                      ));
     initContainer.Configure(x => x.Scan(y =>
                                             {
                                                 y.Assembly("RequestReduce");
                                                 y.IncludeNamespace("RequestReduce.Utilities");
                                                 y.IncludeNamespace("RequestReduce.Configuration");
                                                 y.IncludeNamespace("RequestReduce.ResourceTypes");
                                                 y.AddAllTypesOf<IResourceType>();
                                                 y.With(new SingletonConvention());
                                             }
                                      ));
     initContainer.Configure(
         x =>
         x.For<AbstractFilter>().Use(
             y =>
             HttpContext.Current == null
                 ? new ResponseFilter(null, Encoding.UTF8, y.GetInstance<IResponseTransformer>())
                 : new ResponseFilter(HttpContext.Current.Response.Filter, HttpContext.Current.Response.ContentEncoding, y.GetInstance<IResponseTransformer>())));
     return initContainer;
 }
Example #25
0
 public void Configure(Action <ConfigurationExpression> configuration)
 {
     _container.Configure(configuration);
 }
Example #26
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public IServiceProvider ConfigureServices(IServiceCollection services)
        {
            services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
            services.AddSingleton<IConfigurationRoot>(Configuration);
            services.Configure<AppSettings>(Configuration.GetSection("Application"));
            var appSettings = Configuration.Get<AppSettings>("Application");


            // Add framework services.
            services.AddMvc();    
            //services.AddDistributedMemoryCache(); // Adds a default in-memory implementation of IDistributedCache

            // Using Redis as Memory cache
            services.AddDistributedRedisCache(options =>
            {
                options.Configuration = appSettings.Redis.Url;
                options.InstanceName = appSettings.Redis.InstanceName;
                options.ResolveDns();
            });
            services.AddSession();
            services.AddSignalR();

            // Predefine set of policies        
            services.AddAuthorization(options =>
            {
                options.AddPolicy("ADMIN", policy => {
                    policy.RequireClaim("admin");
                });

                 options.AddPolicy("READ", policy => {
                    policy.RequireClaim("read");
                });

                options.AddPolicy("WRITE", policy => {
                    policy.RequireClaim("write");
                });

                options.AddPolicy("GET", policy => {
                    policy.RequireClaim("get");
                });

                options.AddPolicy("POST", policy => {
                    policy.RequireClaim("post");
                });

                 options.AddPolicy("DELETE", policy => {
                    policy.RequireClaim("delete");
                });
            });

            // Add Authentication services.
            services.AddAuthentication(sharedOptions => sharedOptions.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme);

            // Initialize container            
            container = new Container();
            container.Configure(c =>
            {
                Serilog.ILogger appLogger = new LoggerConfiguration()
                     .WriteTo.Logzio(appSettings.LogzIO.AuthToken,
                     application: appSettings.LogzIO.Application,
                     reporterType: appSettings.LogzIO.ReporterType,
                     environment: appSettings.LogzIO.Environment)
                     .CreateLogger();
                c.For<IApplicationContext>().Use<HttpAPIContext>();
                c.ForSingletonOf<AppSettings>().Use(appSettings);
                c.ForSingletonOf<Serilog.ILogger>().Use(appLogger);
            });

            services.InitializeAutoMapper();


            // Resolve container 
            DependencyResolver.RegisterResolver(new StructureMapIOCContainer(container)).RegisterImplmentation();
            container.Populate(services);

            return container.GetInstance<IServiceProvider>();
        }