點這裏進入ABP系列文章總目錄html
基於DDD的現代ASP.NET開發框架--ABP系列之五、ABP啓動配置
git
ABP是「ASP.NET Boilerplate Project (ASP.NET樣板項目)」的簡稱。github
ABP的官方網站:http://www.aspnetboilerplate.com架構
ABP在Github上的開源項目:https://github.com/aspnetboilerplate框架
本文由 東莞-天道 提供翻譯 ide
譯者注:在看這一節的內容以前,建議你們先下載module-zero這個例子代碼,這個例子就是一個用戶和角色的模塊,而且使用的實例。配置在每個應用中均可能會有,好比你有一個網站,你要獲取網站的一些自定義基本參數,好比logo位置,網站名稱,上傳文件大小等等。模塊化的配置方式和咱們以前的作法確定是不一樣的,你們要注意。以前無非就是一個方法getconfig從對應的表取數據,而後使用。模塊化
在應用啓動以前,abp框架提供了模塊基本的配置和方法,你們參照下面這個例子就能夠了。 網站
配置是經過在本身模塊的PreInitialize方法中來實現的(對於module的PreInitialize方法,在上一篇中已經向你們作了簡單的說明)spa
代碼示例以下:.net
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框架來進行配置。舉個例子吧,不一樣的模塊均可以添加導航,經過導航添加菜單項到本身定義的主菜單,具體的細節你們能夠參照:
和.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