ABP之啓動配置

ASP.NET Boilerplate提供了在StartUp中配置其模塊的基礎設施和模型。app

配置ASP.NET Boilerplate

配置ABP是在模塊的PreInitialize 方法中作的,以下所示:框架

public class SimpleTaskSystemModule : AbpModule
{
    public override void PreInitialize()
    {
        //Add languages for your application
        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"));

        //Add a localization source
        Configuration.Localization.Sources.Add(
            new XmlLocalizationSource(
                "SimpleTaskSystem",
                HttpContext.Current.Server.MapPath("~/Localization/SimpleTaskSystem")
                )
            );

        //Configure navigation/menu
        Configuration.Navigation.Providers.Add<SimpleTaskSystemNavigationProvider>();        
    }

    public override void Initialize()
    {
        IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());
    }
}

ABP的設計考慮到了模塊化,能夠配置不一樣的模塊。好比模塊能夠添加導航提供者在主菜單中添加本身的菜單項(有關配置它們的詳細信息,請參閱本地化和導航文檔)。ide

取代內置服務

Configuration.ReplaceService方法可用於重寫內置服務,例如,咱們能夠用自定義實現替換IAbpSession服務,以下所示:模塊化

Configuration.ReplaceService<IAbpSession, MySession>(DependencyLifeStyle.Transient);

ReplaceService方法有一個重載,經過一個動做以定製的方式進行替換(咱們能夠直接使用Castle Windsor及其高級註冊API)。this

相同的服務能夠被屢次替換,特別是在不一樣的模塊中。最後一個替換的是有效的那個。按照依賴順序執行模塊PreInitialize方法。spa

配置模塊

除了框架本身的啓動配置以外,模塊還能夠擴展IAbpModuleConfigurations接口,爲模塊提供配置點。例如:設計

...
using Abp.Web.Configuration;
...
public override void PreInitialize() 
{
    Configuration.Modules.AbpWebCommon().SendAllExceptionsToClients = true;
}
...

在上面的例子中,咱們配置了AbpWebCommon模塊,將全部異常發送給客戶端。code

不是每一個模塊都應該定義這種類型的配置。當模塊在不一樣的應用程序中須要重用時一般會啓動時配置。blog

爲模塊建立配置

假設咱們有一個名爲MyModule的模塊,它有一些配置屬性。首先,咱們爲這些可配置屬性建立一個類:接口

public class MyModuleConfig
{
    public bool SampleConfig1 { get; set; }

    public string SampleConfig2 { get; set; }
}

 而後,咱們經過抵賴注入將這個類註冊到MyModule的預初始化方法中(所以,它將是可注入的):

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")
        {
            //...
        }
    }
}

經過這種方式,模塊能夠在ASP.NET Boilerplate中建立中心配置點。。。

:

相關文章
相關標籤/搜索