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());
}
}
}