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系统中为模块创建配置中心。
ABP框架 - 启动配置的更多相关文章
- [Abp 源码分析]一、Abp 框架启动流程分析
Abp 不一定仅用于 Asp.Net Core 项目,他也可以在 Console 与 WinFrom 项目当中进行使用,所以关于启动流程可以分为两种,一种是 Asp.Net Core 项目的启动流程, ...
- ABP之启动配置
ASP.NET Boilerplate提供了在StartUp中配置其模块的基础设施和模型. 配置ASP.NET Boilerplate 配置ABP是在模块的PreInitialize 方法中做的,如下 ...
- ABP 框架从源码学习——abp框架启动和结束(1)
1.abp框架的启动是从Global.asax文件的Application_Start启动的,当然代表Global的application必须从AbpWebApplication继承: publ ...
- ABP 框架从源码学习——abp框架启动核心类AbpBootstrapper(2)
在AbpBootstrapper中的两个至关重要的属性:IIocManager 和 IAbpModuleManager public class AbpBootstrapper : IDisposa ...
- 过滤掉Abp框架不需要记录的日志
该文章是系列文章 基于.NetCore和ABP框架如何让Windows服务执行Quartz定时作业 的其中一篇. 问题 ABP.WindowsService/Demo.MyJob/4.0.0该项目不仅 ...
- 【ABP框架系列学习】启动配置(5)
ABP提供了在启动时配置模块的基础设施和模型. 1.配置ABP 配置ABP是在模块的PreInitialize方法中完成的,例如: public class SimpleTaskSystemModul ...
- ABP(现代ASP.NET样板开发框架)系列之5、ABP启动配置
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之5.ABP启动配置 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)” ...
- ABP理论学习之启动配置
返回总目录 本篇目录 配置ABP 配置模块 为模块创建配置 为了在应用启动时配置ABP和模块,ABP提供了一个基础设施. 配置ABP 配置ABP是在模块的PreInitialize事件中完成的.下面的 ...
- 基于DDD的.NET开发框架 - ABP启动配置
返回ABP系列 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ASP.NET Boilerplate是一个用最佳实践和流行技术开发现代WEB应 ...
随机推荐
- 你必须知道的EF知识和经验
注意:以下内容如果没有特别申明,默认使用的EF6.0版本,code first模式. 推荐MiniProfiler插件 工欲善其事,必先利其器. 我们使用EF和在很大程度提高了开发速度,不过随之带来的 ...
- Scrapy框架爬虫初探——中关村在线手机参数数据爬取
关于Scrapy如何安装部署的文章已经相当多了,但是网上实战的例子还不是很多,近来正好在学习该爬虫框架,就简单写了个Spider Demo来实践.作为硬件数码控,我选择了经常光顾的中关村在线的手机页面 ...
- 深入浅出Redis-redis哨兵集群
1.Sentinel 哨兵 Sentinel(哨兵)是Redis 的高可用性解决方案:由一个或多个Sentinel 实例 组成的Sentinel 系统可以监视任意多个主服务器,以及这些主服务器属下的所 ...
- [笔记]kubernetes 无法启动问题
在启动kubernetes的时候报错误. ERROR: timed out for http://localhost:4001/v2/keys/ 原因是无法启动etcd, etcd 监听4001本地端 ...
- MongoDB集群配置
本文演示:(一个主服务器,一个备份服务器,三个仲裁服务器) 官方推荐副本集的成员数量为奇数,最多12个副本集节点,最多7个节点参与选举. 本文演示基于本机,用端口区分服务(每个服务器下新建db文件夹用 ...
- 每天一个设计模式-7 生成器模式(Builder)
每天一个设计模式-7 生成器模式(Builder) 一.实际问题 在讨论工厂方法模式的时候,提到了一个导出数据的应用框架,但是并没有涉及到导出数据的具体实现,这次通过生成器模式来简单实现导出成文本,X ...
- Eclipse使用Git教程
A:点击Window--->Show view--->other..--->Git Repositories--->[OK] B:克隆码云上的代码仓库 C:选择对应目录存储你的 ...
- mac下生成ssh keys 并上传github仓储
使用github仓储需要本机生成一个公钥key 添加到自己的git账户SSH keys中 mac 生成方法: 1. 打开终端 输入 ssh-keygen 然后系统提示输入文件保存位置等信息 ...
- VS2012+EF6+Mysql配置心路历程
为了学习ORM,选择了EntityFramework,经历了三天两夜的煎熬,N多次错误,在群里高手的帮助下,终于成功,现在将我的心路历程记录下来,一是让自己有个记录,另外就是让其它人少走些弯路. 我的 ...
- 【腾讯Bugly干货分享】移动App入侵与逆向破解技术-iOS篇
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/577e0acc896e9ebb6865f321 如果您有耐心看完这篇文章,您将懂 ...