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中建立中心配置点。。。

:

相关文章
相关标签/搜索