using System; using System.Collections.Generic; using System.Linq; using Abp.Application.Features; using Abp.Auditing; using Abp.BackgroundJobs; using Abp.Dependency; using Abp.Domain.Uow; using Abp.EntityHistory; using Abp.Events.Bus; using Abp.Notifications; using Abp.Resources.Embedded; using Abp.Runtime.Caching.Configuration; namespace Abp.Configuration.Startup { /// /// This class is used to configure ABP and modules on startup. /// internal class AbpStartupConfiguration : DictionaryBasedConfig, IAbpStartupConfiguration { /// /// Reference to the IocManager. /// public IIocManager IocManager { get; } /// /// Used to set localization configuration. /// public ILocalizationConfiguration Localization { get; private set; } /// /// Used to configure authorization. /// public IAuthorizationConfiguration Authorization { get; private set; } /// /// Used to configure validation. /// public IValidationConfiguration Validation { get; private set; } /// /// Used to configure settings. /// public ISettingsConfiguration Settings { get; private set; } /// /// Gets/sets default connection string used by ORM module. /// It can be name of a connection string in application's config file or can be full connection string. /// public string DefaultNameOrConnectionString { get; set; } /// /// Used to configure modules. /// Modules can write extension methods to to add module specific configurations. /// public IModuleConfigurations Modules { get; private set; } /// /// Used to configure unit of work defaults. /// public IUnitOfWorkDefaultOptions UnitOfWork { get; private set; } /// /// Used to configure features. /// public IFeatureConfiguration Features { get; private set; } /// /// Used to configure background job system. /// public IBackgroundJobConfiguration BackgroundJobs { get; private set; } /// /// Used to configure notification system. /// public INotificationConfiguration Notifications { get; private set; } /// /// Used to configure navigation. /// public INavigationConfiguration Navigation { get; private set; } /// /// Used to configure . /// public IEventBusConfiguration EventBus { get; private set; } /// /// Used to configure auditing. /// public IAuditingConfiguration Auditing { get; private set; } public ICachingConfiguration Caching { get; private set; } /// /// Used to configure multi-tenancy. /// public IMultiTenancyConfig MultiTenancy { get; private set; } public Dictionary ServiceReplaceActions { get; private set; } public IEmbeddedResourcesConfiguration EmbeddedResources { get; private set; } public IEntityHistoryConfiguration EntityHistory { get; private set; } public IList CustomConfigProviders { get; private set; } public Dictionary GetCustomConfig() { var mergedConfig = new Dictionary(); using (var scope = IocManager.CreateScope()) { foreach (var provider in CustomConfigProviders) { var config = provider.GetConfig(new CustomConfigProviderContext(scope)); foreach (var keyValue in config) { mergedConfig[keyValue.Key] = keyValue.Value; } } } return mergedConfig; } /// /// Private constructor for singleton pattern. /// public AbpStartupConfiguration(IIocManager iocManager) { IocManager = iocManager; } public void Initialize() { Localization = IocManager.Resolve(); Modules = IocManager.Resolve(); Features = IocManager.Resolve(); Navigation = IocManager.Resolve(); Authorization = IocManager.Resolve(); Validation = IocManager.Resolve(); Settings = IocManager.Resolve(); UnitOfWork = IocManager.Resolve(); EventBus = IocManager.Resolve(); MultiTenancy = IocManager.Resolve(); Auditing = IocManager.Resolve(); Caching = IocManager.Resolve(); BackgroundJobs = IocManager.Resolve(); Notifications = IocManager.Resolve(); EmbeddedResources = IocManager.Resolve(); EntityHistory = IocManager.Resolve(); CustomConfigProviders = new List(); ServiceReplaceActions = new Dictionary(); } public void ReplaceService(Type type, Action replaceAction) { ServiceReplaceActions[type] = replaceAction; } public T Get() { return GetOrCreate(typeof(T).FullName, () => IocManager.Resolve()); } } }