ABP(現代ASP.NET樣板開發框架)系列之5、ABP啟動配置


點這里進入ABP系列文章總目錄

 

基於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框架來進行配置。舉個例子吧,不同的模塊都可以添加導航,通過導航添加菜單項到自己定義的主菜單,具體的細節大家可以參照:

 

配置模塊

和.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

ABP架構設計交流群

 

點這里進入ABP系列文章總目錄

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM