public static void AddCMS( this IServiceCollection services, IConfiguration configuration) { var cmsOptions = configuration.GetSection("CMSOptions").Get <CMSOptions>(); var databaseOptions = configuration.GetSection("DatabaseOptions").Get <DatabaseOptions>(); services.AddSingleton <IThemeProvider, ThemeProvider>(); services.AddSingleton <ISiteProvider, SiteProvider>(); services.AddSingleton <IPageProvider, PageProvider>(); services.AddSingleton <ISiteRouteProvider, SiteRouteProvider>(); services.AddScoped <ISiteRequestAccessor, SiteRequestAccessor>(); services.AddTransient <IPageService, PageService>(); services.AddScoped <CheckingSiteRequestMiddleware>(); services.AddScoped <CheckingPageRequestMiddleware>(); services.AddScoped <ResolvingRequestMiddleware>(); services.AddScoped <CheckingGoogleMetadataRequestMiddleware>(); services.AddScoped <CheckingPageVersionRequestMiddleware>(); services.AddScoped <CombiningPageRequestMiddleware>(); services.AddScoped <CheckingResponseCachingMiddleware>(); services.AddScoped <CMSTransformer>(); services.AddTransient <ITagHelperComponent, GoogleMetadataTagHelper>(); var allScannedAssemblies = GetModuleAssemblies(cmsOptions).ToList(); allScannedAssemblies.ForEach(a => { var moduleRegistration = ModuleUtils.GetModuleRegistration(a); if (moduleRegistration != null) { services.AddSingleton(moduleRegistration); moduleRegistration.Register(services, configuration, databaseOptions); } }); }