天天看點

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

  • 本地化: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來得到配置的引用。如下代碼:

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

譯者注:子產品配置是一個靜态類,因為我們需要重複使用它。靜态方法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(現代ASP.NET樣闆開發架構)系列之5、ABP啟動配置

繼續閱讀