public void Register(IDependencyBuilder builder) { //Register references dependency modules builder.RegisterModule <ModernSlavery.BusinessDomain.Shared.DependencyModule>(); builder.RegisterModule <ModernSlavery.WebUI.GDSDesignSystem.DependencyModule>(); //Register HttpCache and HttpSession builder.Autofac.RegisterType <HttpSession>().As <IHttpSession>().InstancePerLifetimeScope(); builder.Autofac.RegisterType <HttpCache>().As <IHttpCache>().SingleInstance(); //Register the web service container builder.Autofac.RegisterType <WebService>().As <IWebService>().InstancePerLifetimeScope(); //Register factories builder.Autofac.RegisterType <ErrorViewModelFactory>().As <IErrorViewModelFactory>() .SingleInstance(); //Register Email queuers builder.Autofac.RegisterType <SendEmailService>().As <ISendEmailService>().SingleInstance().WithAttributeFiltering(); builder.Autofac.RegisterType <NotificationService>().As <INotificationService>().SingleInstance().WithAttributeFiltering(); ////Register all controllers - this is required to ensure KeyFilter is resolved in constructors //builder.Autofac.RegisterAssemblyTypes(typeof(DependencyModule).Assembly) // .Where(t => t.IsAssignableTo<Controller>()) // .InstancePerLifetimeScope() // .WithAttributeFiltering(); //Register StaticAssetsVersioningHelper builder.Services.AddSingleton <StaticAssetsVersioningHelper>(); //Add the custom url helper builder.Services.AddSingleton <IUrlHelperFactory, CustomUrlHelperFactory>(); }
public void Register(IDependencyBuilder builder) { //Register references dependency modules builder.RegisterModule <ModernSlavery.BusinessDomain.Shared.DependencyModule>(); builder.RegisterModule <ModernSlavery.WebUI.Shared.DependencyModule>(); //TODO: Register dependencies here //Register all controllers - this is required to ensure KeyFilter is resolved in constructors builder.Autofac.RegisterAssemblyTypes(typeof(DependencyModule).Assembly) .Where(t => t.IsAssignableTo <Controller>()) .InstancePerLifetimeScope() .WithAttributeFiltering(); }
public void Register(IDependencyBuilder builder) { builder.Services.AddHttpClient <GovNotifyEmailProvider>(nameof(GovNotifyEmailProvider)); builder.Services.AddApplicationInsightsTelemetry(_sharedOptions.AppInsights_InstrumentationKey); builder.Services.AddSingleton <IJobActivator, AutofacJobActivator>(); //Register the file storage dependencies builder.RegisterModule <FileStorageDependencyModule>(); //Register the log storage dependencies builder.RegisterModule <Infrastructure.Logging.DependencyModule>(); //Register the messaging dependencies builder.Autofac.RegisterType <Messenger>().As <IMessenger>().SingleInstance(); builder.Autofac.RegisterType <GovNotifyAPI>().As <IGovNotifyAPI>().SingleInstance(); // Register the email template dependencies builder.Autofac .RegisterInstance(new EmailTemplateRepository(FileSystem.ExpandLocalPath("~/App_Data/EmailTemplates"))) .As <IEmailTemplateRepository>().SingleInstance(); //Register some singletons builder.Autofac.RegisterType <InternalObfuscator>().As <IObfuscator>().SingleInstance() .WithParameter("seed", _sharedOptions.ObfuscationSeed); // Register email provider dependencies builder.Autofac.RegisterType <GovNotifyEmailProvider>().SingleInstance().WithAttributeFiltering(); builder.Autofac.RegisterType <SmtpEmailProvider>().SingleInstance().WithAttributeFiltering(); builder.Autofac.RegisterType <EmailProvider>().SingleInstance().WithAttributeFiltering(); // Need to register webJob class in Autofac as well builder.Autofac.RegisterType <Functions>().InstancePerDependency(); builder.Autofac.RegisterType <DisableWebjobProvider>().SingleInstance(); }
public void Register(IDependencyBuilder builder) { //Register references dependency modules builder.RegisterModule <ModernSlavery.BusinessDomain.Registration.DependencyModule>(); builder.RegisterModule <ModernSlavery.BusinessDomain.Shared.DependencyModule>(); builder.RegisterModule <ModernSlavery.WebUI.Shared.DependencyModule>(); //Register public and private repositories builder.Autofac.RegisterType <PublicSectorRepository>() .As <IPagedRepository <EmployerRecord> >() .Keyed <IPagedRepository <EmployerRecord> >("Public") .InstancePerLifetimeScope(); builder.Autofac.RegisterType <PrivateSectorRepository>() .As <IPagedRepository <EmployerRecord> >() .Keyed <IPagedRepository <EmployerRecord> >("Private") .InstancePerLifetimeScope(); //Register all controllers - this is required to ensure KeyFilter is resolved in constructors builder.Autofac.RegisterAssemblyTypes(typeof(DependencyModule).Assembly) .Where(t => t.IsAssignableTo <Controller>()) .InstancePerLifetimeScope() .WithAttributeFiltering(); }
public void Register(IDependencyBuilder builder) { //Allow handler for caching of http responses builder.Services.AddResponseCaching(); //Allow creation of a static http context anywhere builder.Services.AddHttpContextAccessor(); var mvcBuilder = builder.Services.AddControllersWithViews( options => { options.AddStringTrimmingProvider(); //Add modelstate binder to trim input options.ModelMetadataDetailsProviders.Add( new TrimModelBinder()); //Set DisplayMetadata to input empty strings as null options.ModelMetadataDetailsProviders.Add( new DefaultResourceValidationMetadataProvider()); // sets default resource type to use for display text and error messages _responseCachingOptions.CacheProfiles.ForEach(p => options.CacheProfiles.Add(p)); //Load the response cache profiles from options options.Filters.Add <ErrorHandlingFilter>(); }); mvcBuilder.AddRazorClassLibrary <WebUI.Account.DependencyModule>(); mvcBuilder.AddRazorClassLibrary <WebUI.Admin.DependencyModule>(); mvcBuilder.AddRazorClassLibrary <WebUI.Registration.DependencyModule>(); mvcBuilder.AddRazorClassLibrary <WebUI.Submission.DependencyModule>(); mvcBuilder.AddRazorClassLibrary <WebUI.Viewing.DependencyModule>(); mvcBuilder.AddRazorClassLibrary <WebUI.Shared.DependencyModule>(); mvcBuilder.AddRazorClassLibrary <WebUI.GDSDesignSystem.DependencyModule>(); builder.RegisterModule <WebUI.StaticFiles.DependencyModule>(); builder.RegisterModule <WebUI.Account.DependencyModule>(); builder.RegisterModule <WebUI.Admin.DependencyModule>(); builder.RegisterModule <WebUI.Registration.DependencyModule>(); builder.RegisterModule <WebUI.Submission.DependencyModule>(); builder.RegisterModule <WebUI.Viewing.DependencyModule>(); // Add controllers, taghelpers, views as services so attribute dependencies can be resolved in their contructors mvcBuilder.AddControllersAsServices(); mvcBuilder.AddTagHelpersAsServices(); mvcBuilder.AddViewComponentsAsServices(); // Set the default resolver to use Pascalcase instead of the default camelCase which may break Ajaz responses mvcBuilder.AddJsonOptions(options => { options.JsonSerializerOptions.PropertyNameCaseInsensitive = true; options.JsonSerializerOptions.PropertyNamingPolicy = null; }); mvcBuilder.AddDataAnnotationsLocalization( options => { options.DataAnnotationLocalizerProvider = DataAnnotationLocalizerProvider.DefaultResourceHandler; }); //Add antiforgery token by default to forms builder.Services.AddAntiforgery(); builder.Services.AddRazorPages(); // we need to explicitly set AllowRecompilingViewsOnFileChange because we use a custom environment "Local" for local dev // https://docs.microsoft.com/en-us/aspnet/core/mvc/views/view-compilation?view=aspnetcore-3.1#runtime-compilation // However this doesnt work on razor class/com,ponent libraries so we instead use a workaround //if (_sharedOptions.IsDevelopment() || _sharedOptions.IsLocal()) mvcBuilder.AddRazorRuntimeCompilation(); //Add services needed for sessions builder.Services.AddSession( o => { o.Cookie.IsEssential = true; //This is required otherwise session will not load o.Cookie.SecurePolicy = CookieSecurePolicy.Always; //Equivalent to <httpCookies requireSSL="true" /> from Web.Config o.Cookie.HttpOnly = false; //Always use https cookies o.Cookie.SameSite = SameSiteMode.Strict; o.Cookie.Domain = _sharedOptions.ExternalHost .BeforeFirst(":"); //Domain cannot be an authority and contain a port number o.IdleTimeout = TimeSpan.FromMinutes(_sharedOptions .SessionTimeOutMinutes); //Equivalent to <sessionState timeout="20"> from old Web.config }); //Add the distributed cache and data protection builder.Services.AddDistributedCache(_distributedCacheOptions) .AddDataProtection(_dataProtectionOptions); //Add app insights tracking builder.Services.AddApplicationInsightsTelemetry(_sharedOptions.AppInsights_InstrumentationKey); //This may now be required builder.Services.AddHttpsRedirection(options => { options.HttpsPort = 443; }); //Override any test services ConfigureTestServices?.Invoke(builder.Services); //Register the file storage dependencies builder.RegisterModule <FileStorageDependencyModule>(); //Register the queue storage dependencies builder.RegisterModule <QueueStorageDependencyModule>(); //Register the queue storage dependencies builder.Autofac.RegisterType <DnBOrgsRepository>().As <IDnBOrgsRepository>().WithParameter("dataPath", _sharedOptions.DataPath).WithAttributeFiltering(); //Register the log storage dependencies builder.RegisterModule <Infrastructure.Logging.DependencyModule>(); //Register the search dependencies builder.RegisterModule <Infrastructure.Search.DependencyModule>(); builder.Autofac.RegisterType <GovNotifyAPI>().As <IGovNotifyAPI>().SingleInstance(); //Register the user audit log repository builder.Autofac.RegisterType <UserRepository>().As <IUserRepository>().InstancePerLifetimeScope(); // Register Action helpers builder.Autofac.RegisterType <ActionContextAccessor>().As <IActionContextAccessor>() .SingleInstance(); #region Configure authentication client //Configure the services required for authentication by IdentityServer builder.Services.AddIdentityServerClient( _sharedOptions.IdentityIssuer, _sharedOptions.SiteAuthority, "ModernSlaveryServiceWebsite", _sharedOptions.AuthSecret, BackChannelHandler); #endregion builder.Autofac.Register( x => { var actionContext = x.Resolve <IActionContextAccessor>().ActionContext; var factory = x.Resolve <IUrlHelperFactory>(); return(factory.GetUrlHelper(actionContext)); }); //Register google analytics tracker builder.RegisterModule <GoogleAnalyticsDependencyModule>(); //Register the AutoMapper configurations in all domain assemblies builder.Services.AddAutoMapper(_sharedOptions.IsLocal() || _sharedOptions.IsDevelopment()); //Override any test services ConfigureTestContainer?.Invoke(builder.Autofac); }
public void Register(IDependencyBuilder builder) { #region Configure authentication server builder.Services.AddSingleton <IEventSink, AuditEventSink>(); var clients = new Clients(_sharedOptions); var resources = new Resources(_sharedOptions); var identityServer = builder.Services.AddIdentityServer( options => { options.Events.RaiseSuccessEvents = true; options.Events.RaiseFailureEvents = true; options.Events.RaiseErrorEvents = true; options.UserInteraction.LoginUrl = "/sign-in"; options.UserInteraction.LogoutUrl = "/sign-out"; options.UserInteraction.ErrorUrl = "/error"; }) .AddInMemoryClients(clients.Get()) .AddInMemoryIdentityResources(resources.GetIdentityResources()) //.AddInMemoryApiResources(Resources.GetApiResources()) .AddCustomUserStore(); if (Debugger.IsAttached || _sharedOptions.IsDevelopment() || _sharedOptions.IsLocal()) { identityServer.AddDeveloperSigningCredential(); } else { identityServer.AddSigningCredential(LoadCertificate(_sharedOptions)); } #endregion //Allow caching of http responses builder.Services.AddResponseCaching(); //This is to allow access to the current http context anywhere builder.Services.AddHttpContextAccessor(); var mvcBuilder = builder.Services.AddControllersWithViews(); mvcBuilder.AddRazorClassLibrary <DependencyModule>(); mvcBuilder.AddRazorClassLibrary <WebUI.Shared.DependencyModule>(); mvcBuilder.AddRazorClassLibrary <WebUI.GDSDesignSystem.DependencyModule>(); builder.RegisterModule <WebUI.StaticFiles.DependencyModule>(); builder.RegisterModule <ModernSlavery.BusinessDomain.Account.DependencyModule>(); //builder.RegisterModule<ModernSlavery.Infrastructure.CompaniesHouse.DependencyModule>(); // Add controllers, taghelpers, views as services so attribute dependencies can be resolved in their contructors mvcBuilder.AddControllersAsServices(); mvcBuilder.AddTagHelpersAsServices(); mvcBuilder.AddViewComponentsAsServices(); builder.Services.AddRazorPages(); // we need to explicitly set AllowRecompilingViewsOnFileChange because we use a custom environment "Local" for local dev // https://docs.microsoft.com/en-us/aspnet/core/mvc/views/view-compilation?view=aspnetcore-3.1#runtime-compilation // However this doesnt work on razor class/com,ponent libraries so we instead use a workaround //if (_sharedOptions.IsDevelopment() || _sharedOptions.IsLocal()) mvcBuilder.AddRazorRuntimeCompilation(); //Add services needed for sessions builder.Services.AddSession( o => { o.Cookie.IsEssential = true; //This is required otherwise session will not load o.Cookie.SecurePolicy = CookieSecurePolicy.Always; //Equivalent to <httpCookies requireSSL="true" /> from Web.Config o.Cookie.HttpOnly = false; //Always use https cookies o.Cookie.SameSite = SameSiteMode.Strict; o.Cookie.Domain = _sharedOptions.ExternalHost .BeforeFirst(":"); //Domain cannot be an authority and contain a port number o.IdleTimeout = TimeSpan.FromMinutes(_sharedOptions .SessionTimeOutMinutes); //Equivalent to <sessionState timeout="20"> from old Web.config }); //Add the distributed cache and data protection builder.Services.AddDistributedCache(_distributedCacheOptions) .AddDataProtection(_dataProtectionOptions); //Add app insights tracking builder.Services.AddApplicationInsightsTelemetry(_sharedOptions.AppInsights_InstrumentationKey); //This may now be required builder.Services.AddHttpsRedirection(options => { options.HttpsPort = 443; }); //Override any test services ConfigureTestServices?.Invoke(builder.Services); //Register the file storage dependencies builder.RegisterModule <FileStorageDependencyModule>(); // Register queues (without key filtering) builder.Autofac .Register(c => new LogEventQueue(_storageOptions.AzureConnectionString, c.Resolve <IFileRepository>())) .SingleInstance(); builder.Autofac .Register(c => new LogRecordQueue(_storageOptions.AzureConnectionString, c.Resolve <IFileRepository>())) .SingleInstance(); // Register log records (without key filtering) builder.Autofac.RegisterType <UserAuditLogger>().As <IUserLogger>().SingleInstance(); // Register Action helpers builder.Autofac.RegisterType <ActionContextAccessor>().As <IActionContextAccessor>() .SingleInstance(); //Register google analytics tracker builder.RegisterModule <GoogleAnalyticsDependencyModule>(); //Register the AutoMapper configurations in all domain assemblies builder.Services.AddAutoMapper(_sharedOptions.IsLocal() || _sharedOptions.IsDevelopment()); //Override any test services ConfigureTestContainer?.Invoke(builder.Autofac); }