protected override void ConfigureIoC(IStyletIoCBuilder builder) { IAppPathProvider pathProvider = new AppPathProvider(); try { var appconfig = ApplicationConfig.Load(pathProvider.ConfigFile); var hosting = HostingOptions.Load(pathProvider.HostingConfigFile); //Config builder.Bind <IApplicationConfig>().ToInstance(appconfig); builder.Bind <AuthenticationOptions>().ToInstance(appconfig.Authentication); builder.Bind <AuditOptions>().ToInstance(appconfig.Auditing); builder.Bind <AuthorizationOptions>().ToInstance(appconfig.Authorization); builder.Bind <EmailOptions>().ToInstance(appconfig.Email); builder.Bind <ForwardedHeadersAppOptions>().ToInstance(appconfig.ForwardedHeaders); builder.Bind <HostingOptions>().ToInstance(hosting); builder.Bind <RateLimitOptions>().ToInstance(appconfig.RateLimits); builder.Bind <UserInterfaceOptions>().ToInstance(appconfig.UserInterface); builder.Bind <JitConfigurationOptions>().ToInstance(appconfig.JitConfiguration); // ViewModels builder.Bind <ApplicationConfigViewModel>().ToSelf(); builder.Bind <AuthenticationViewModel>().ToSelf(); builder.Bind <EmailViewModel>().ToSelf(); builder.Bind <HostingViewModel>().ToSelf(); builder.Bind <AuditingViewModel>().ToSelf(); builder.Bind <AuthorizationViewModel>().ToSelf(); builder.Bind <ActiveDirectoryConfigurationViewModel>().ToSelf(); builder.Bind <IpDetectionViewModel>().ToSelf(); builder.Bind <PowershellNotificationChannelDefinitionsViewModel>().ToSelf(); builder.Bind <PowershellNotificationChannelDefinitionViewModel>().ToSelf(); builder.Bind <RateLimitsViewModel>().ToSelf(); builder.Bind <SmtpNotificationChannelDefinitionsViewModel>().ToSelf(); builder.Bind <SmtpNotificationChannelDefinitionViewModel>().ToSelf(); builder.Bind <UserInterfaceViewModel>().ToSelf(); builder.Bind <WebhookNotificationChannelDefinitionsViewModel>().ToSelf(); builder.Bind <WebhookNotificationChannelDefinitionViewModel>().ToSelf(); builder.Bind <HelpViewModel>().ToSelf(); builder.Bind <LapsConfigurationViewModel>().ToSelf(); builder.Bind <JitConfigurationViewModel>().ToSelf(); // ViewModel factories builder.Bind <INotificationChannelSelectionViewModelFactory>().To <NotificationChannelSelectionViewModelFactory>(); builder.Bind <ISecurityDescriptorTargetViewModelFactory>().To <SecurityDescriptorTargetViewModelFactory>(); builder.Bind <ISecurityDescriptorTargetsViewModelFactory>().To <SecurityDescriptorTargetsViewModelFactory>(); builder.Bind <IFileSelectionViewModelFactory>().To <FileSelectionViewModelFactory>(); builder.Bind <IActiveDirectoryDomainPermissionViewModelFactory>().To <ActiveDirectoryDomainPermissionViewModelFactory>(); builder.Bind <IActiveDirectoryForestSchemaViewModelFactory>().To <ActiveDirectoryForestSchemaViewModelFactory>(); builder.Bind <IX509Certificate2ViewModelFactory>().To <X509Certificate2ViewModelFactory>(); builder.Bind <IJitGroupMappingViewModelFactory>().To <JitGroupMappingViewModelFactory>(); builder.Bind <IJitDomainStatusViewModelFactory>().To <JitDomainStatusViewModelFactory>(); builder.Bind(typeof(INotificationChannelDefinitionsViewModelFactory <,>)).ToAllImplementations(); builder.Bind(typeof(INotificationChannelDefinitionViewModelFactory <,>)).ToAllImplementations(); // Services builder.Bind <RandomNumberGenerator>().ToInstance(RandomNumberGenerator.Create()); builder.Bind <IDialogCoordinator>().To <DialogCoordinator>(); builder.Bind <IDirectory>().To <ActiveDirectory>(); builder.Bind <IServiceSettingsProvider>().To <ServiceSettingsProvider>(); builder.Bind <INotificationSubscriptionProvider>().To <NotificationSubscriptionProvider>(); builder.Bind <IEncryptionProvider>().To <EncryptionProvider>(); builder.Bind <ICertificateProvider>().To <CertificateProvider>(); builder.Bind <IAppPathProvider>().To <AppPathProvider>(); builder.Bind <INotifiableEventPublisher>().To <NotifiableEventPublisher>(); builder.Bind(typeof(IModelValidator <>)).To(typeof(FluentModelValidator <>)); builder.Bind(typeof(IValidator <>)).ToAllImplementations(); builder.Bind <ILoggerFactory>().ToInstance(this.loggerFactory); builder.Bind(typeof(ILogger <>)).To(typeof(Logger <>)); base.ConfigureIoC(builder); } catch (Exception ex) { this.logger.LogError(EventIDs.UIInitializationError, ex, "Initialization error"); throw; } }
protected override void ConfigureIoC(IStyletIoCBuilder builder) { IAppPathProvider pathProvider = new AppPathProvider(registryProvider); try { try { ClusterProvider provider = new ClusterProvider(); if (provider.IsClustered && !provider.IsOnActiveNode()) { throw new ClusterNodeNotActiveException("The AMS service is not active on this cluster node. Please run this app on the currently active node"); } } catch (ClusterNodeNotActiveException) { throw; } catch (Exception ex) { logger.LogError(EventIDs.UIGenericError, ex, "Unable to determine cluster node status"); } if (!File.Exists(pathProvider.ConfigFile)) { this.logger.LogCritical(EventIDs.UIGenericError, "Config file was not found at path {path}", pathProvider.ConfigFile); throw new MissingConfigurationException($"The appsettings.config file could not be found at path {pathProvider.ConfigFile}. Please resolve the issue and restart the application"); } if (!File.Exists(pathProvider.HostingConfigFile)) { this.logger.LogCritical(EventIDs.UIGenericError, "Apphost file was not found at path {path}", pathProvider.HostingConfigFile); throw new MissingConfigurationException($"The apphost.config file could not be found at path {pathProvider.HostingConfigFile}. Please resolve the issue and restart the application"); } appconfig = ApplicationConfig.Load(pathProvider.ConfigFile); var hosting = HostingOptions.Load(pathProvider.HostingConfigFile); //Config builder.Bind <IApplicationConfig>().ToInstance(appconfig); builder.Bind <AuthenticationOptions>().ToInstance(appconfig.Authentication); builder.Bind <AuditOptions>().ToInstance(appconfig.Auditing); builder.Bind <AuthorizationOptions>().ToInstance(appconfig.Authorization); builder.Bind <EmailOptions>().ToInstance(appconfig.Email); builder.Bind <ForwardedHeadersAppOptions>().ToInstance(appconfig.ForwardedHeaders); builder.Bind <HostingOptions>().ToInstance(hosting); builder.Bind <RateLimitOptions>().ToInstance(appconfig.RateLimits); builder.Bind <UserInterfaceOptions>().ToInstance(appconfig.UserInterface); builder.Bind <JitConfigurationOptions>().ToInstance(appconfig.JitConfiguration); builder.Bind <LicensingOptions>().ToInstance(appconfig.Licensing); builder.Bind <DatabaseConfigurationOptions>().ToInstance(appconfig.DatabaseConfiguration); builder.Bind <DataProtectionOptions>().ToInstance(appconfig.DataProtection); builder.Bind <AdminNotificationOptions>().ToInstance(appconfig.AdminNotifications); // ViewModel factories builder.Bind(typeof(INotificationChannelDefinitionsViewModelFactory <,>)).ToAllImplementations(); builder.Bind(typeof(INotificationChannelDefinitionViewModelFactory <,>)).ToAllImplementations(); builder.Bind <INotificationChannelSelectionViewModelFactory>().To <NotificationChannelSelectionViewModelFactory>(); builder.Bind <ISecurityDescriptorTargetViewModelFactory>().To <SecurityDescriptorTargetViewModelFactory>(); builder.Bind <ISecurityDescriptorTargetsViewModelFactory>().To <SecurityDescriptorTargetsViewModelFactory>(); builder.Bind <IFileSelectionViewModelFactory>().To <FileSelectionViewModelFactory>(); builder.Bind <IActiveDirectoryDomainPermissionViewModelFactory>().To <ActiveDirectoryDomainPermissionViewModelFactory>(); builder.Bind <IActiveDirectoryForestSchemaViewModelFactory>().To <ActiveDirectoryForestSchemaViewModelFactory>(); builder.Bind <IX509Certificate2ViewModelFactory>().To <X509Certificate2ViewModelFactory>(); builder.Bind <IJitGroupMappingViewModelFactory>().To <JitGroupMappingViewModelFactory>(); builder.Bind <IJitDomainStatusViewModelFactory>().To <JitDomainStatusViewModelFactory>(); builder.Bind <IEffectiveAccessViewModelFactory>().To <EffectiveAccessViewModelFactory>(); builder.Bind <IImportProviderFactory>().To <ImportProviderFactory>(); builder.Bind <IImportResultsViewModelFactory>().To <ImportResultsViewModelFactory>(); // Services builder.Bind <RandomNumberGenerator>().ToInstance(RandomNumberGenerator.Create()); builder.Bind <IDialogCoordinator>().To <DialogCoordinator>(); builder.Bind <IDirectory>().To <ActiveDirectory>(); builder.Bind <ILocalSam>().To <LocalSam>(); builder.Bind <IComputerPrincipalProviderRpc>().To <ComputerPrincipalProviderRpc>(); builder.Bind <IComputerPrincipalProviderCsv>().To <ComputerPrincipalProviderCsv>(); builder.Bind <IComputerPrincipalProviderLaps>().To <ComputerPrincipalProviderLaps>(); builder.Bind <IComputerPrincipalProviderBitLocker>().To <ComputerPrincipalProviderBitLocker>(); builder.Bind <IDiscoveryServices>().To <DiscoveryServices>(); builder.Bind <IWindowsServiceProvider>().To <WindowsServiceProvider>(); builder.Bind <INotificationSubscriptionProvider>().To <NotificationSubscriptionProvider>(); builder.Bind <IEncryptionProvider>().To <EncryptionProvider>(); builder.Bind <ICertificateProvider>().To <CertificateProvider>(); builder.Bind <IAppPathProvider>().To <AppPathProvider>(); builder.Bind <INotifyModelChangedEventPublisher>().To <NotifyModelChangedEventPublisher>(); builder.Bind <IShellExecuteProvider>().To <ShellExecuteProvider>(); builder.Bind <IDomainTrustProvider>().To <DomainTrustProvider>(); builder.Bind <IComputerTargetProvider>().To <ComputerTargetProvider>(); builder.Bind <IObjectSelectionProvider>().To <ObjectSelectionProvider>(); builder.Bind <ITargetDataProvider>().To <TargetDataProvider>(); builder.Bind <ITargetDataCache>().To <TargetDataCache>(); builder.Bind <IAuthorizationContextProvider>().To <AuthorizationContextProvider>(); builder.Bind <IAuthorizationInformationBuilder>().To <AuthorizationInformationBuilder>(); builder.Bind <IPowerShellSecurityDescriptorGenerator>().To <PowerShellSecurityDescriptorGenerator>(); builder.Bind <IAuthorizationInformationMemoryCache>().To <AuthorizationInformationMemoryCache>(); builder.Bind <IPowerShellSessionProvider>().To <CachedPowerShellSessionProvider>(); builder.Bind <IScriptTemplateProvider>().To <ScriptTemplateProvider>(); builder.Bind <IRegistryProvider>().ToInstance(registryProvider); builder.Bind <ICertificatePermissionProvider>().To <CertificatePermissionProvider>(); builder.Bind <ICertificateSynchronizationProvider>().To <CertificateSynchronizationProvider>(); builder.Bind <IApplicationUpgradeProvider>().To <ApplicationUpgradeProvider>(); builder.Bind <IFirewallProvider>().To <FirewallProvider>(); builder.Bind <IHttpSysConfigurationProvider>().To <HttpSysConfigurationProvider>(); builder.Bind <SqlServerInstanceProvider>().ToSelf(); builder.Bind <IProtectedSecretProvider>().To <ProtectedSecretProvider>().InSingletonScope(); builder.Bind <IClusterProvider>().To <ClusterProvider>().InSingletonScope(); builder.Bind <IProductSettingsProvider>().To <ProductSettingsProvider>().InSingletonScope(); builder.Bind <IAmsLicenseManager>().To <AmsLicenseManager>().InSingletonScope(); builder.Bind <ISecretRekeyProvider>().To <SecretRekeyProvider>().InSingletonScope(); builder.Bind <ILicenseDataProvider>().To <OptionsLicenseDataProvider>().InSingletonScope(); builder.Bind(typeof(IModelValidator <>)).To(typeof(FluentModelValidator <>)); builder.Bind(typeof(IValidator <>)).ToAllImplementations(); builder.Bind <ILoggerFactory>().ToInstance(this.loggerFactory); builder.Bind(typeof(ILogger <>)).To(typeof(Logger <>)); builder.Bind(typeof(IOptions <>)).To(typeof(OptionsWrapper <>)).InSingletonScope(); builder.Bind(typeof(IOptionsSnapshot <>)).To(typeof(OptionsManager <>)); builder.Bind(typeof(IOptionsFactory <>)).To(typeof(OptionsFactory <>)); builder.Bind(typeof(IOptionsMonitorCache <>)).To(typeof(OptionsCache <>)).InSingletonScope(); base.ConfigureIoC(builder); } catch (ApplicationInitializationException ex) { this.logger.LogCritical(EventIDs.UIInitializationError, ex, "Initialization error"); throw; } catch (Exception ex) { this.logger.LogCritical(EventIDs.UIInitializationError, ex, "Initialization error"); throw new ApplicationInitializationException("The application failed to initialize", ex); } }