ABP提供了在启动时配置模块的基础设施和模型。app
配置ABP是在模块的PreInitialize方法中完成的,例如:框架
ABP是基于模块设计的。不一样的模块均可以配置ABP。例如:不一样的模块能够添加导航提供者(navigation providers)往主菜单添加自定义子菜单。ide
Configuration.ReplaceService()方法能够覆盖内置服务。例如,你能够用定义实现的类替换IAbpSession服务:函数
ReplaceService()方法经过重载操做以定义方式实现替换(也能够直接使用Castle Windsor高级的注册API)。ui
同一个服务能够屡次被替换,尤为是在不一样的模块间。生效的服务是最后被替换的那个。PreInitialize()方法按依赖顺序执行。this
除了ABP框架自身的启动配置外,模块也能够经过扩展IAbpModuleConfigurations接口,为模块提供配置点。spa
在上述代码中,配置AbpWebCommon模块把全部异常发送给客户端。设计
不是每一个模块都应该定义相似这种类型的配置,一般状况是在不一样的应用程序中须要重复使用的才定义,而且要在启动时进行配置。code
假设咱们有一个叫MyModule的模块,它带有一些配置属性。首先,为这些配置属性建立一个类:对象
而后在PreInitialize方法中经过DI(Dependency Injection)注册这个类(所以,MyModuleConfig是可注册的类):
像本事例那样注册为单例对象。那么,咱们可使用以下代码在PreInitialize方法中配置MyModule模块:
然而咱们能够相似以下代码,经过建立IModuleConfigurations扩展方法,使用IAbpStartupConfiguration.Get()方法得到引用:
那么,其它模块能够经过扩展方法配置MyModule模块:
这使得查询模块配置和收集它们变得容易(Configuration.Modules...)。ABP自己为它本身的模块配置定义了扩展方法。
在某些地方,MyModule模块须要这些配置,你能够经过构造函数注入并使用配置值。以下:
这样,在ABP系统中,模块能够建立集中配置的点。