ABP官方文档翻译 1.4 启动配置

启动配置

  ABP提供了基础设施和模型在启动的时候对它及模块进行配置。

配置ABP

  在模块的PreInitialize事件中配置ABP。示例配置如下:

复制代码
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是设计为模块化的。不同的模块可以配置ABP。例如,不同的模块可以添加导航提供者在主菜单上添加自己的菜单。(参见localization和navigation了解更多详情)。

替换内建服务

  Configuration.ReplaceService方法可以用来覆写内建服务。例如,可以使用自定义实现来替换IabpSession服务,如下:

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

  ReplaceService方法有个传递action参数的重载方法可以用来自定义覆盖(可以直接使用Castle Windsor来使用高级注册API)。

同样的服务可以被覆盖多次(尤其是在不同的模块中)。最后的覆盖是有效的(如你所知,模块的Preinitialize方法按照依赖顺序执行)。

 配置模块

  除了框架自己的启动配置外,模块可以继承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; }
}
复制代码
  然后我们在MyModule(因此,它是可以注入的)的PreInitialize事件中注册这个类到依赖注入:
IocManager.Register<MyModuleConfig>();

  在本例中应该注入为单例的。现在,可以使用下面的代码在模块的PreInitialize方法中配置MyModule:

Configuration.Get<MyModuleConfig>().SampleConfig1 = false;

  虽然可以使用如下所示的IAbpStartupConfiguration.Get方法,我们可以创建一个ImoduleConfiguratjions的扩展方法,如下:

复制代码
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需要这种配置。可以注入MyModuleConfiguration并且使用配置值。示例如下:

复制代码
public class MyService : ITransientDependency
{
    private readonly MyModuleConfig _configuration;

    public MyService(MyModuleConfig configuration)
    {
        _configuration = configuration;
    }

    public void DoIt()
    {
        if (_configuration.SampleConfig2 == "test")
        {
            //...
        }
    }
}
复制代码

  因此,模块可以在ABP系统中创建中心配置点。

返回主目录

posted @ 2017-05-18 21:32  罗志均  阅读(119)  评论(0编辑  收藏  举报
友情链接:回力 | 中老年女装 | 武汉英语培训机构 | 留学费用一览表 | 托福考试费用