ABP框架 - 啟動配置


文檔目錄

 

本節內容:

 

ABP在啟動時,提供基礎框架和模型來配置和模塊化。

 

置ABP

在預初始化事件中進行配置,示例:

kid1412注:XmlLocalizationSource這個類已經被作者刪除,具體方法參考后面的“本地化”文檔。--2016年11月09日 11:40 PM。

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系統中為模塊創建配置中心。


免責聲明!

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



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