ABP提供了在啟動時配置模塊的基礎設施和模型。 1.配置ABP 配置ABP是在模塊的PreInitialize方法中完成的,例如: public class SimpleTaskSystemModule : AbpModule { public override void PreInitialize ...
ABP提供了在啟動時配置模塊的基礎設施和模型。
1.配置ABP
配置ABP是在模塊的PreInitialize方法中完成的,例如:
public class SimpleTaskSystemModule : AbpModule { public override void PreInitialize() { //添加語言 Configuration.Localization.Languages.Add(new LanguageInfo("en", "English", "famfamfam-flag-england", true)); Configuration.Localization.Languages.Add(new LanguageInfo("tr", "Türkçe", "famfamfam-flag-tr")); //添加本地化語言 Configuration.Localization.Sources.Add( new XmlLocalizationSource( "SimpleTaskSystem", HttpContext.Current.Server.MapPath("~/Localization/SimpleTaskSystem") ) ); //配置導航菜單 Configuration.Navigation.Providers.Add<SimpleTaskSystemNavigationProvider>(); } public override void Initialize() { IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly()); } }
ABP是基於模塊設計的。不同的模塊都可以配置ABP。例如:不同的模塊可以添加導航提供者(navigation providers)往主菜單添加自定義子菜單。
替換內置(Built-In)服務
Configuration.ReplaceService()方法可以覆蓋內置服務。例如,你可以用定義實現的類替換IAbpSession服務:
Configuration.ReplaceService<IAbpSession, MySession>(DependencyLifeStyle.Transient);
ReplaceService()方法通過重載操作以定義方式實現替換(也可以直接使用Castle Windsor高級的註冊API)。
同一個服務可以多次被替換,尤其是在不同的模塊間。生效的服務是最後被替換的那個。PreInitialize()方法按依賴順序執行。
2.配置模塊
除了ABP框架自身的啟動配置外,模塊也可以通過擴展IAbpModuleConfigurations介面,為模塊提供配置點。
... using Abp.Web.Configuration; ... public override void PreInitialize() { Configuration.Modules.AbpWebCommon().SendAllExceptionsToClients = true; } ...
在上述代碼中,配置AbpWebCommon模塊把所有異常發送給客戶端。
不是每個模塊都應該定義類似這種類型的配置,通常情況是在不同的應用程式中需要重覆使用的才定義,並且要在啟動時進行配置。
3.為模塊創建配置
假設我們有一個叫MyModule的模塊,它帶有一些配置屬性。首先,為這些配置屬性創建一個類:
public class MyModuleConfig { public bool SampleConfig1 { get; set; } public string SampleConfig2 { get; set; } }
然後在PreInitialize方法中通過DI(Dependency Injection)註冊這個類(因此,MyModuleConfig是可註冊的類):
IocManager.Register<MyModuleConfig>();
像本事例那樣註冊為單例對象。那麼,我們可以使用如下代碼在PreInitialize方法中配置MyModule模塊:
Configuration.Get<MyModuleConfig>().SampleConfig1 = false;
然而我們可以類似如下代碼,通過創建IModuleConfigurations擴展方法,使用IAbpStartupConfiguration.Get()方法獲得引用:
public static class MyModuleConfigurationExtensions { public static MyModuleConfig MyModule(this IModuleConfigurations moduleConfigurations) { return moduleConfigurations.AbpConfiguration.Get<MyModuleConfig>(); } }
那麼,其它模塊可以通過擴展方法配置MyModule模塊:
Configuration.Modules.MyModule().SampleConfig1 = false; Configuration.Modules.MyModule().SampleConfig2 = "test";
這使得查詢模塊配置和收集它們變得容易(Configuration.Modules...)。ABP本身為它自己的模塊配置定義了擴展方法。
在某些地方,MyModule模塊需要這些配置,你可以通過構造函數註入並使用配置值。如下:
public class MyService : ITransientDependency { private readonly MyModuleConfig _configuration; public MyService(MyModuleConfig configuration) { _configuration = configuration; } public void DoIt() { if (_configuration.SampleConfig2 == "test") { //... } } }
這樣,在ABP系統中,模塊可以創建集中配置的點。