基於DDD的現代ASP.NET開發框架--ABP系列之5、ABP啟動配置
ABP是“ASP.NET Boilerplate Project (ASP.NET樣板項目)”的簡稱。
ABP的官方網站:http://www.aspnetboilerplate.com
ABP在Github上的開源項目:https://github.com/aspnetboilerplate
本文由 東莞-天道 提供翻譯
譯者注:在看這一節的內容之前,建議大家先下載module-zero這個例子代碼,這個例子就是一個用戶和角色的模塊,並且使用的實例。配置在每一個應用中都可能會有,比如你有一個網站,你要獲取網站的一些自定義基本參數,比如logo位置,網站名稱,上傳文件大小等等。模塊化的配置方式和我們之前的做法肯定是不同的,大家要注意。之前無非就是一個方法getconfig從對應的表取數據,然后使用。
在應用啟動之前,abp框架提供了模塊基本的配置和方法,大家參照下面這個例子就可以了。
配置ABP
配置是通過在自己模塊的PreInitialize方法中來實現的(對於module的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()); } }
和orchard類似,abp框架一開始就被設計成模塊化的,不同的模塊可以通過abp框架來進行配置。舉個例子吧,不同的模塊都可以添加導航,通過導航添加菜單項到自己定義的主菜單,具體的細節大家可以參照:
- 本地化:http://www.aspnetboilerplate.com/Pages/Documents/Localization
- 導航:http://www.aspnetboilerplate.com/Pages/Documents/Navigation
配置模塊
和.net框架原生的啟動配置相比較,abp有哪些不一樣呢?abp框架的模塊可以通過IAbpModuleConfigurations接口進行個性化的擴展,這樣的話,模塊配置更加簡單、方便。
示例代碼如下:
... using Abp.Web.Configuration; ... public override void PreInitialize() { Configuration.Modules.AbpWeb().SendAllExceptionsToClients = true; } ...
在上面這個例子中,我們通過配置AbpWeb模塊,發送異常到客戶端。當然了,不是每一個模塊都需要這種配置,通常情況下我們需要,是當一個模塊需要在多個不同的應用中重復使用,我們才進行這樣的配置。
為一個模塊創建配置
如下代碼,假如我們有一個命名為MyModule的模塊,並且這各模塊有一些自己的配置。那么我們首先要創建一些類,這些類定義為屬性(譯者注:屬性有自動的get和set訪問器。),代表了不同的配置。
public class MyModuleConfig { public bool SampleConfig1 { get; set; } public string SampleConfig2 { get; set; } }
接下來,我們通過依賴注入,注冊這個類。
IocManager.Register<MyModuleConfig>(); //譯者注:在IocManager中注冊了一個類,換句話說,我們通過IocManager可以得到這個類MyModuleConfig的實例。至於IOC的原理這里就不在詳細說了,總之,就是可以得到一個類的實例。
最后,我們通過創建一個擴展的方法IModuleConfigurations來得到配置的引用。如下代碼:

譯者注:模塊配置是一個靜態類,因為我們需要重復使用它。靜態方法Mymodule返回的是一個配置接口,參數是ImoduleConfigurations接口。
現在,在其他模塊中也可以配置我們自定義的這個MyModule模塊了。
Configuration.Modules.MyModule().SampleConfig1 = false; Configuration.Modules.MyModule().SampleConfig2 = "test";
在某種意義上,MyModule需要這些配置,你能注射MyModuleConfig並且可以使用這些值。
public class MyService : ITransientDependency { private readonly MyModuleConfig _configuration; public MyService(MyModuleConfig configuration) { _configuration = configuration; } public void DoIt() { if (_configuration.SampleConfig2 == "test") { //... } } }
這意味着,在abp框架的系統中,所有的模塊都可以集中配置。
希望更多國內的架構師能關注到ABP這個項目,也許這其中有能幫助到您的地方,也許有您的參與,這個項目可以發展得更好。
歡迎加ABP架構設計交流QQ群:134710707

