/// <summary> /// Adds all aspnet core services (AddMemoryCache(),AddSession() etc) required for the framework /// as well as registers all ExioSopifyFramework services. /// </summary> /// <param name="services"></param> /// <param name="Configuration"></param> /// <param name="mvcBuilder"></param> public static void AddExicoShopifyRequiredServices(this IServiceCollection services, IConfiguration Configuration, IMvcBuilder mvcBuilder) { #region DB context services.AddDbContext <ExicoIdentityDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString(AppSettingsAccessor.DB_CON_STRING_NAME))); services.AddIdentity <AspNetUser, IdentityRole>(options => { options.Password.RequireNonAlphanumeric = false; options.Password.RequireLowercase = false; options.Password.RequireUppercase = false; }) .AddEntityFrameworkStores <ExicoIdentityDbContext>() .AddDefaultTokenProviders(); services.ConfigureApplicationCookie(options => { options.Cookie.Name = AppSettingsAccessor.IDENTITY_CORE_AUTH_COOKIE_NAME; }); services.AddDbContext <ExicoShopifyDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString(AppSettingsAccessor.DB_CON_STRING_NAME))); #endregion #region Db services services.AddTransient <ExicoShopifyDbUnitOfWork, ExicoShopifyDbUnitOfWork>(); services.AddTransient <ExicoShopifyDbRepository <Plan>, ExicoShopifyDbRepository <Plan> >(); services.AddTransient <IDbService <Plan>, ExicoShopifyDbService <Plan> >(); services.AddTransient <ExicoShopifyDbRepository <AspNetUser>, ExicoShopifyDbRepository <AspNetUser> >(); services.AddTransient <IDbService <AspNetUser>, ExicoShopifyDbService <AspNetUser> >(); services.AddTransient <ExicoShopifyDbRepository <SystemSetting>, ExicoShopifyDbRepository <SystemSetting> >(); services.AddTransient <IDbService <SystemSetting>, ExicoShopifyDbService <SystemSetting> >(); #endregion #region Filters services.AddScoped <AdminPasswordVerification>(); services.AddScoped <IPAddressVerification>(); services.AddScoped <RequiresPlan>(); services.AddScoped <RequireSubscription>(); #endregion #region Scoped services services.AddScoped <IPlansReader, PlansReader>(); services.AddScoped <IDbSettingsReader, DbSettingsReader>(); services.AddScoped <IUserCaching, UserCaching>(); services.AddScoped <IWebMsgConfig, DefaultWebMsgConfig>(); #endregion #region Scoped Services services.AddScoped <IGenerateUserPassword, DefaultPasswordGenerator>(); services.AddScoped <IShopifyApi, ShopifyApi>(); services.AddScoped <IWebMessenger, DefaultWebMessenger>(); services.AddScoped <IAppSettingsAccessor, AppSettingsAccessor>(); #endregion #region Transient Services services.AddTransient <IEmailer, SendGridEmailer>(); services.AddTransient <IShopifyEventsEmailer, ShopifyEventsEmailer>(); #endregion services.AddMemoryCache(); var scopeFactory = services.BuildServiceProvider().GetRequiredService <IServiceScopeFactory>(); using (var scope = scopeFactory.CreateScope()) { var logger = scope.ServiceProvider.GetService <ILogger <Startup> >(); var isEmbeded = AppSettingsAccessor.IsUsingEmbededSdk(Configuration); logger.LogInformation($"Embeded app sdk usage is set to '{isEmbeded}'."); if (isEmbeded) { logger.LogInformation("Setting up cookie provider for temp data."); mvcBuilder.AddCookieTempDataProvider(x => x.Cookie.SameSite = SameSiteMode.None); logger.LogInformation("Done setting up temp data cookie provider."); logger.LogInformation("Setting up site cookie policy to 'SameSiteMode.None'."); services.ConfigureApplicationCookie(options => { options.Cookie.SameSite = SameSiteMode.None; }); logger.LogInformation("Done setting up cookie policy."); logger.LogInformation("Setting up anti forgery SuppressXFrameOptionsHeader = true."); services.AddAntiforgery(x => x.SuppressXFrameOptionsHeader = true); logger.LogInformation("Done setting up anti forgery."); } } }