AbpStartupConfiguration.cs 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using Abp.Application.Features;
  5. using Abp.Auditing;
  6. using Abp.BackgroundJobs;
  7. using Abp.Dependency;
  8. using Abp.Domain.Uow;
  9. using Abp.EntityHistory;
  10. using Abp.Events.Bus;
  11. using Abp.Notifications;
  12. using Abp.Resources.Embedded;
  13. using Abp.Runtime.Caching.Configuration;
  14. namespace Abp.Configuration.Startup
  15. {
  16. /// <summary>
  17. /// This class is used to configure ABP and modules on startup.
  18. /// </summary>
  19. internal class AbpStartupConfiguration : DictionaryBasedConfig, IAbpStartupConfiguration
  20. {
  21. /// <summary>
  22. /// Reference to the IocManager.
  23. /// </summary>
  24. public IIocManager IocManager { get; }
  25. /// <summary>
  26. /// Used to set localization configuration.
  27. /// </summary>
  28. public ILocalizationConfiguration Localization { get; private set; }
  29. /// <summary>
  30. /// Used to configure authorization.
  31. /// </summary>
  32. public IAuthorizationConfiguration Authorization { get; private set; }
  33. /// <summary>
  34. /// Used to configure validation.
  35. /// </summary>
  36. public IValidationConfiguration Validation { get; private set; }
  37. /// <summary>
  38. /// Used to configure settings.
  39. /// </summary>
  40. public ISettingsConfiguration Settings { get; private set; }
  41. /// <summary>
  42. /// Gets/sets default connection string used by ORM module.
  43. /// It can be name of a connection string in application's config file or can be full connection string.
  44. /// </summary>
  45. public string DefaultNameOrConnectionString { get; set; }
  46. /// <summary>
  47. /// Used to configure modules.
  48. /// Modules can write extension methods to <see cref="ModuleConfigurations"/> to add module specific configurations.
  49. /// </summary>
  50. public IModuleConfigurations Modules { get; private set; }
  51. /// <summary>
  52. /// Used to configure unit of work defaults.
  53. /// </summary>
  54. public IUnitOfWorkDefaultOptions UnitOfWork { get; private set; }
  55. /// <summary>
  56. /// Used to configure features.
  57. /// </summary>
  58. public IFeatureConfiguration Features { get; private set; }
  59. /// <summary>
  60. /// Used to configure background job system.
  61. /// </summary>
  62. public IBackgroundJobConfiguration BackgroundJobs { get; private set; }
  63. /// <summary>
  64. /// Used to configure notification system.
  65. /// </summary>
  66. public INotificationConfiguration Notifications { get; private set; }
  67. /// <summary>
  68. /// Used to configure navigation.
  69. /// </summary>
  70. public INavigationConfiguration Navigation { get; private set; }
  71. /// <summary>
  72. /// Used to configure <see cref="IEventBus"/>.
  73. /// </summary>
  74. public IEventBusConfiguration EventBus { get; private set; }
  75. /// <summary>
  76. /// Used to configure auditing.
  77. /// </summary>
  78. public IAuditingConfiguration Auditing { get; private set; }
  79. public ICachingConfiguration Caching { get; private set; }
  80. /// <summary>
  81. /// Used to configure multi-tenancy.
  82. /// </summary>
  83. public IMultiTenancyConfig MultiTenancy { get; private set; }
  84. public Dictionary<Type, Action> ServiceReplaceActions { get; private set; }
  85. public IEmbeddedResourcesConfiguration EmbeddedResources { get; private set; }
  86. public IEntityHistoryConfiguration EntityHistory { get; private set; }
  87. public IList<ICustomConfigProvider> CustomConfigProviders { get; private set; }
  88. public Dictionary<string, object> GetCustomConfig()
  89. {
  90. var mergedConfig = new Dictionary<string, object>();
  91. using (var scope = IocManager.CreateScope())
  92. {
  93. foreach (var provider in CustomConfigProviders)
  94. {
  95. var config = provider.GetConfig(new CustomConfigProviderContext(scope));
  96. foreach (var keyValue in config)
  97. {
  98. mergedConfig[keyValue.Key] = keyValue.Value;
  99. }
  100. }
  101. }
  102. return mergedConfig;
  103. }
  104. /// <summary>
  105. /// Private constructor for singleton pattern.
  106. /// </summary>
  107. public AbpStartupConfiguration(IIocManager iocManager)
  108. {
  109. IocManager = iocManager;
  110. }
  111. public void Initialize()
  112. {
  113. Localization = IocManager.Resolve<ILocalizationConfiguration>();
  114. Modules = IocManager.Resolve<IModuleConfigurations>();
  115. Features = IocManager.Resolve<IFeatureConfiguration>();
  116. Navigation = IocManager.Resolve<INavigationConfiguration>();
  117. Authorization = IocManager.Resolve<IAuthorizationConfiguration>();
  118. Validation = IocManager.Resolve<IValidationConfiguration>();
  119. Settings = IocManager.Resolve<ISettingsConfiguration>();
  120. UnitOfWork = IocManager.Resolve<IUnitOfWorkDefaultOptions>();
  121. EventBus = IocManager.Resolve<IEventBusConfiguration>();
  122. MultiTenancy = IocManager.Resolve<IMultiTenancyConfig>();
  123. Auditing = IocManager.Resolve<IAuditingConfiguration>();
  124. Caching = IocManager.Resolve<ICachingConfiguration>();
  125. BackgroundJobs = IocManager.Resolve<IBackgroundJobConfiguration>();
  126. Notifications = IocManager.Resolve<INotificationConfiguration>();
  127. EmbeddedResources = IocManager.Resolve<IEmbeddedResourcesConfiguration>();
  128. EntityHistory = IocManager.Resolve<IEntityHistoryConfiguration>();
  129. CustomConfigProviders = new List<ICustomConfigProvider>();
  130. ServiceReplaceActions = new Dictionary<Type, Action>();
  131. }
  132. public void ReplaceService(Type type, Action replaceAction)
  133. {
  134. ServiceReplaceActions[type] = replaceAction;
  135. }
  136. public T Get<T>()
  137. {
  138. return GetOrCreate(typeof(T).FullName, () => IocManager.Resolve<T>());
  139. }
  140. }
  141. }