ABP理论学习之启动配置
本篇目录
为了在应用启动时配置ABP和模块,ABP提供了一个基础设施。
配置ABP###
配置ABP是在模块的PreInitialize事件中完成的。下面的代码摘自Github上的Taskever(一个任务系统Demo):
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。比如,不同的模块可以通过添加导航提供者来给主菜单添加自己的菜单选项。
配置模块###
除了ABP框架自身的启动配置之外,模块也可以实现IAbpModuleConfigurations接口来为模块提供配置点。比如:
...
using Abp.Web.Configuration;
...
public override void PreInitialize()
{
Configuration.Modules.AbpWeb().SendAllExceptionsToClients = true;
}
...
在本例中,我们配置了AbpWeb模块,目的是将所有的异常发送到客户端。
并不是每一个模块都应该定义这种类型的配置。一般是当一个模块需要在不同的应用中重用的时候,才需要在启动时进行配置。
为模块创建配置###
假设我们有一个叫做“MyModule”的模块,它有一些配置属性。首先,我们为这些配置属性创建一个类MyModuleConfig:
public class MyModuleConfig
{
public bool SampleConfig1 { get; set; }
public string SampleConfig2 { get; set; }
}
然后,我们在MyModule的PreInitialize事件中将这个类MyModuleConfig注册到DI中(这样,MyModuleConfig就成为了可注册的类):
IocManager.Register<MyModuleConfig>();
最后,我们创建IModuleConfiguration的扩展方法来获得MyModuleConfig的引用。
public static class MyModuleConfigurationExtensions
{
public static MyModuleConfig MyModule(this IModuleConfigurations moduleConfigurations)
{
return moduleConfigurations.AbpConfiguration
.GetOrCreate("MyModuleConfig",
() => moduleConfigurations.AbpConfiguration.IocManager.Resolve<MyModuleConfig>()
);
}
}
现在,在应用启动时,其他的模块就可以配置这个模块了(在需要配置MyModule的模块的PreInitialize事件中):
Configuration.Modules.MyModule().SampleConfig1 = false;
Configuration.Modules.MyModule().SampleConfig2 = "test";
有时候,MyModule需要这样的配置。你可以注册MyModuleConfig,并使用配置的值。例如:
public class MyService : ITransientDependency
{
private readonly MyModuleConfig _configuration;
public MyService(MyModuleConfig configuration)
{
_configuration = configuration;
}
public void DoIt()
{
if (_configuration.SampleConfig2 == "test")
{
//...
}
}
}
这样,在ABP系统中,模块就可以创建集中配置点了,也就是说模块可以集中起来配置了。
如果您认为这篇文章还不错或者有所收获,您可以通过右边的“打赏”功能 打赏我一杯咖啡【物质支持】,也可以点击右下角的【好文要顶】按钮【精神支持】,因为这两种支持都是我继续写作,分享的最大动力!
作者:tkb至简
声明:原创博客请在转载时保留原文链接或者在文章开头加上本人博客地址,如发现错误,欢迎批评指正。凡是转载于本人的文章,不能设置打赏功能,如有特殊需求请与本人联系!
已将所有赞助者统一放到单独页面!签名处只保留最近10条赞助记录!查看赞助者列表
衷心感谢打赏者的厚爱与支持!也感谢点赞和评论的园友的支持! | |||
---|---|---|---|
打赏者 | 打赏金额 | 打赏日期 | |
微信:匿名 | 10.00 | 2017-08-03 | |
微信:匿名 | 10.00 | 2017-08-04 | |
微信:匿名 | 5.00 | 2017-06-15 | |
支付宝:一个名字499***@qq.com | 5.00 | 2017-06-14 | |
微信:匿名 | 16.00 | 2017-04-08 | |
支付宝:向京刘 | 10.00 | 2017-04-13 | |
微信:匿名 | 10.00 | 2017-003-08 | |
微信:匿名 | 5.00 | 2017-03-08 | |
支付宝:lll20001155 | 5.00 | 2017-03-03 | |
支付宝:她是一个弱女子 | 5.00 | 2017-03-02 |