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系统中为模块创建配置中心。

posted @ 2016-10-19 16:06 kid1412 阅读(...) 评论(...) 编辑 收藏