东莞市盛裕绒艺玩具有限公司

东莞市盛裕绒艺玩具有限公司

欧亿OE备用入口

13571500226
联系方式
全国服务热线: 13571500226

咨询热线:15256605834
联系人:王晶晶
地址:沈阳市大东区东北大马路279号

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

来源:欧亿OE备用入口   发布时间:2019-11-22   点击量:80

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系统中,模块可以创建集中配置的点。

相关产品

COPYRIGHTS©2017 欧亿OE备用入口 ALL RIGHTS RESERVED 备案号:80