文檔目錄 本節內容: 配置ABP 替換內置服務 配置模塊 為一個模塊創建配置 替換內置服務 ABP在啟動時,提供基礎框架和模型來配置和模塊化。 置ABP 在預初始化事件中進行配置,示例: ABP進行了模塊化設計,不同的模塊都能配置ABP。例如,不同的模塊都能添加導航提供器把自己的菜單項加入到主菜單中 ...
本節內容:
ABP在啟動時,提供基礎框架和模型來配置和模塊化。
在預初始化事件中進行配置,示例:
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。例如,不同的模塊都能添加導航提供器把自己的菜單項加入到主菜單中。(細節參見本地化和導航文檔)
Configuration.ReplaceServices方法可以用來重寫一個內置服務。例如,你可以用自定義的實現替換IAbpSession服務,如下所示:
Configuration.ReplaceService<IAbpSession, MySession>(DependencyLifeStyle.Transient);
ReplaceServices方法有一個重載,用自定義方式傳遞一個Action來替換。(你可以直接使用Castle Windsor的高級註冊API)。
同一個服務可以被替換多次(尤其在不同的模塊里)。最後一次替換的那個才可用(如你所知,模塊預初始化方法是按依賴關係順序被執行)。
除了框架自身的啟動配置,一個模塊可擴展IAbpModuleConfigurations介面來提供配置切入點,例如:
... using Abp.Web.Configuration; ... public override void PreInitialize() { Configuration.Modules.AbpWebCommon().SendAllExceptionsToClients = true; } ...
例子中,我們配置了用AbpWebCommon模塊負責發送異常給客戶端。
不是每個模塊都應該定義此類的配置。一般只有當為一個可重用於其它應用而寫的模塊時,才需要在啟動時配置。
假設我們有一個名為MyModule的模塊,它有一些配置屬性。首先,我們為這些配置屬性創建一個類:
public class MyModuleConfig { public bool SampleConfig1 { get; set; } public string SampleConfig2 { get; set; } }
然後,在依賴註入的預初始化事件里註冊這個類:
IocManager.Register<MyModuleConfig>();
在本例中,它應該註冊成單例,現在我們可以使用下麵的代碼,在我們模塊的PreInitialize方法中配置MyModule:
Configuration.Get<MyModuleConfig>().SampleConfig1 = false;
此時我們可以使用IAbpStartupConfiguration.Get方法,如下所示,我們可以給IModuleConfigurations創建一個擴展方法:
public static class MyModuleConfigurationExtensions { public static MyModuleConfig MyModule(this IModuleConfigurations moduleConfigurations) { return moduleConfigurations.AbpConfiguration.Get<MyModuleConfig>(); } }
現在,其它模塊可以使用這個擴展方法置這個模塊:
Configuration.Modules.MyModule().SampleConfig1 = false; Configuration.Modules.MyModule().SampleConfig2 = "test";
這樣就很容易在一個單獨的地方檢查模塊的配置並集中它們(Configuration.Modules...)。ABP已為自身的模塊配置定義了擴展方法。
在某些情況,MyModule可以像下麵這樣配置,註入MyModuleConfig並使用配置值:
public class MyService : ITransientDependency { private readonly MyModuleConfig _configuration; public MyService(MyModuleConfig configuration) { _configuration = configuration; } public void DoIt() { if (_configuration.SampleConfig2 == "test") { //... } } }
因此,可以在ABP系統中為模塊創建配置中心。