【ABP框架系列学习】启动配置(5)

ABP提供了在启动时配置模块的基础设施和模型。

1.配置ABP

配置ABP是在模块的PreInitialize方法中完成的,例如:

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。例如:不同的模块可以添加导航提供者(navigation providers)往主菜单添加自定义子菜单。

替换内置(Built-In)服务

Configuration.ReplaceService()方法可以覆盖内置服务。例如,你可以用定义实现的类替换IAbpSession服务:

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

ReplaceService()方法通过重载操作以定义方式实现替换(也可以直接使用Castle Windsor高级的注册API)。

同一个服务可以多次被替换,尤其是在不同的模块间。生效的服务是最后被替换的那个。PreInitialize()方法按依赖顺序执行。

2.配置模块

除了ABP框架自身的启动配置外,模块也可以通过扩展IAbpModuleConfigurations接口,为模块提供配置点。

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

在上述代码中,配置AbpWebCommon模块把所有异常发送给客户端。

不是每个模块都应该定义类似这种类型的配置,通常情况是在不同的应用程序中需要重复使用的才定义,并且要在启动时进行配置。

3.为模块创建配置

假设我们有一个叫MyModule的模块,它带有一些配置属性。首先,为这些配置属性创建一个类:

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

    public string SampleConfig2 { get; set; }
}

然后在PreInitialize方法中通过DI(Dependency Injection)注册这个类(因此,MyModuleConfig是可注册的类):

IocManager.Register<MyModuleConfig>();

像本事例那样注册为单例对象。那么,我们可以使用如下代码在PreInitialize方法中配置MyModule模块:

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

然而我们可以类似如下代码,通过创建IModuleConfigurations扩展方法,使用IAbpStartupConfiguration.Get()方法获得引用:

public static class MyModuleConfigurationExtensions
{
    public static MyModuleConfig MyModule(this IModuleConfigurations moduleConfigurations)
    {
        return moduleConfigurations.AbpConfiguration.Get<MyModuleConfig>();
    }
}

那么,其它模块可以通过扩展方法配置MyModule模块:

Configuration.Modules.MyModule().SampleConfig1 = false;
Configuration.Modules.MyModule().SampleConfig2 = "test";

这使得查询模块配置和收集它们变得容易(Configuration.Modules...)。ABP本身为它自己的模块配置定义了扩展方法。

在某些地方,MyModule模块需要这些配置,你可以通过构造函数注入并使用配置值。如下:

public class MyService : ITransientDependency
{
    private readonly MyModuleConfig _configuration;

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

    public void DoIt()
    {
        if (_configuration.SampleConfig2 == "test")
        {
            //...
        }
    }
}

这样,在ABP系统中,模块可以创建集中配置的点。

原文地址:https://www.cnblogs.com/OlderGiser/p/10035819.html

时间: 2024-08-01 15:42:38

【ABP框架系列学习】启动配置(5)的相关文章

【ABP框架系列学习】N层架构(3)

原文:[ABP框架系列学习]N层架构(3) 目录 0.引言 1.DDD分层 2.ABP应用构架模型 客户端应用程序(Client Applications) 表现层(Presentation Layer) 分布式服务层(Distributed Service Layer) 应用层(Application Layer) 领域层 基础设施层 3.使用ABP项目模版快速生成应用程序 0.引言 应用程序的分层是一种广泛接受的技术, 可以降低复杂度和提高代码的可重用性.为了实现分层架构,ABP遵循领域驱动

【ABP框架系列学习】模块系统(4)

0.引言 ABP提供了构建模块和通过组合模块以创建应用程序的基础设施.一个模块可以依赖于另外一个模块.通常,程序集可以认为是模块.如果创建多个程序集的应用程序,建议为每个程序集创建模块定义. 当前,模块系统主要集中在服务器,而不是客户端. 1.模块定义 模块是从ABP包中的AbpModule派生的类定义的.比如说开发一个可以用于不同应用程序的博客模块(Blog Module).最简单的模块定义如下 : public class MyBlogApplicationModule : AbpModul

【ABP框架系列学习】介绍篇(1)

  0.引言 该系列博文主要在[官方文档]及[tkbSimplest]ABP框架理论研究系列博文的基础上进行总结的,或许大家会质问,别人都已经翻译过了,这不是多此一举吗?原因如下: 1.[tkbSimplest]的相关博文由于撰写得比较早的,在参照官方文档学习的过程中,发现部分知识未能及时同步(当前V4.0.2版本),如[EntityHistory].[Multi-Lingual Engities]章节未涉及.[Caching]章节没有Entity Caching等内容. 2.进一步深入学习AB

ABP启动配置

ABP启动配置 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ABP的官方网站:http://www.aspnetboilerplate.com ABP在Github上的开源项目:https://github.com/aspnetboilerplate 本文由 东莞-天道 提供翻译 译者注:在看这一节的内容之前,建议大家先下载module-zero这个例子代码,这个例子就是一个用户和角色的模块,并且使用的实例.配置在每一个应用中都可能会有

基于DDD的现代ASP.NET开发框架--ABP系列之5、ABP启动配置

点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之5.ABP启动配置 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ABP的官方网站:http://www.aspnetboilerplate.com ABP在Github上的开源项目:https://github.com/aspnetboilerplate 本文由 东莞-天道 提供翻译 译者注:在看这一节的内容之前,建议大家先下载module-zero这

基于DDD的.NET开发框架 - ABP启动配置

返回ABP系列 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ASP.NET Boilerplate是一个用最佳实践和流行技术开发现代WEB应用程序的新起点,它旨在成为一个通用的WEB应用程序框架和项目模板. ABP的官方网站:http://www.aspnetboilerplate.com ABP官方文档:http://www.aspnetboilerplate.com/Pages/Documents Github上的开源项目:http

&lt;&lt;ABP文档 - 框架&gt;&gt; 1.4 启动配置

文档目录 本节内容: 配置ABP 替换内置服务 配置模块 为一个模块创建配置 ABP在启动时,提供基础框架和模型来配置和模块化. 配置ABP 在预初始化事件中进行配置,示例: public class SimpleTaskSystemModule : AbpModule { public override void PreInitialize() { //为你的应用添加语言 Configuration.Localization.Languages.Add(new LanguageInfo("en

ABP框架 - 启动配置

ABP可以在启动的时候对模块进行配置. 配置ABP 在模块的PreInitialize方法中,可以对ABP进行配置.配置示例如下: public class SimpleTaskSystemModule : AbpModule { public override void PreInitialize() { //Add languages for your application Configuration.Localization.Languages.Add(new LanguageInfo(

ABP 框架从源码学习1--

一开始可能会写得很乱,因为自己也不太清楚从哪里入手,可能会直接将一些别人的心得罗列出来,后面我会在吸收了以后,找到了头绪,然后整理归纳出自己的东西. 不多扯了,先摘一段别人的心得,原文链接http://www.cnblogs.com/Azula/p/4988949.html AbpBootstrapper类在Abp.dll中,其主要用于框架的基本配置的注册和初始化,在Web应用启动阶段实例化一个AbpBootstrapper并调用Initialize方法初始化, public abstract