ABP官方文档(四)【启动配置】
来源:互联网 发布:域名反向解析作用 编辑:程序博客网 时间:2024/06/05 11:03
1.4 ABP总体介绍 - 启动配置
在应用启动之前,abp框架提供了模块基本的配置和方法,大家参照下面这个例子就可以了。
译者注:
在看这一节的内容之前,建议大家先下载module-zero这个例子代码,这个例子就是一个用户和角色的模块,并且使用的实例。配置在每一个应用中都可能会有,比如你有一个网站,你要获取网站的一些自定义基本参数,比如logo位置,网站名称,上传文件大小等等。模块化的配置方式和我们之前的做法肯定是不同的,大家要注意。之前无非就是一个方法getconfig从对应的表取数据,然后使用。
1.4.1 配置ABP
配置是通过在自己模块的PreInitialize方法中来实现的(对于module的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()); }}
和orchard类似,abp框架一开始就被设计成模块化的,不同的模块可以通过abp框架来进行配置。举个例子吧,不同的模块都可以添加导航,通过导航添加菜单项到自己定义的主菜单,具体的细节大家可以参照:
- 本地化
- 导航
替换内置服务
Configuration.ReplaceService 方法可以被用来重写某个内置的服务。例如,你可以替换掉IAbpSession服务使用你自己扩展的服务。如下所示:
Configuration.ReplaceService<IAbpSession, MySession>(DependencyLifeStyle.Transient);
ReplaceService 方法通过传递一个 Action 来实现替换,这样我们就可以使用自定义的扩展类型替换掉原来的类型(你也可以直接使用Castle Windsor直接调用更高级的API函数)。
同一个服务可以被替换多次(尤其是在不同的模块)。最后替换的类型才是最终的使用类型。
1.4.2 配置模块
和.net框架原生的启动配置相比较,abp有哪些不一样呢?abp框架的模块可以通过IAbpModuleConfigurations接口进行个性化的扩展,这样的话,模块配置更加简单、方便。
示例代码如下:
...using Abp.Web.Configuration;...public override void PreInitialize() { Configuration.Modules.AbpWebCommon().SendAllExceptionsToClients = true;}...
在上面这个例子中,我们通过配置AbpWebCommon模块,发送异常到客户端。当然了,不是每一个模块都需要这种配置,通常情况下我们需要,是当一个模块需要在多个不同的应用中重复使用,我们才进行这样的配置。
1.4.3 为一个模块创建配置
如下代码,假如我们有一个命名为MyModule的模块,并且这各模块有一些自己的配置。那么我们首先要创建一些类,这些类定义为属性(译者注:属性有自动的get和set访问器。),代表了不同的配置。
public class MyModuleConfig{ public bool SampleConfig1 { get; set; } public string SampleConfig2 { get; set; }}
接下来,我们通过依赖注入,注册这个类。IocManager.Register();
译者注:
在IocManager中注册了一个类,换句话说,我们通过IocManager可以得到这个类MyModuleConfig的实例。至于IOC的原理这里就不在详细说了,总之,就是可以得到一个类的实例。
最后,我们通过创建一个扩展的方法IModuleConfigurations来得到配置的引用。如下代码:
译者注:
模块配置是一个静态类,因为我们需要重复使用它。静态方法Mymodule返回的是一个配置接口,参数是ImoduleConfigurations接口。
现在,在其他模块中也可以配置我们自定义的这个MyModule模块了。 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框架的系统中,所有的模块都可以集中配置。
- ABP官方文档(四)【启动配置】
- ABP官方文档翻译 1.4 启动配置
- ABP官方文档(十五)【实体】
- ABP官方文档(十七)【仓储】
- ABP官方文档翻译 3.6 工作单元
- ABP官方文档翻译 3.5 规约
- ABP官方文档翻译 3.4 领域服务
- ABP官方文档翻译 3.3 仓储
- ABP官方文档翻译 3.2 值对象
- ABP官方文档翻译 3.1 实体
- ABP官方文档翻译 2.6 定时
- ABP官方文档翻译 2.5 设置管理
- ABP官方文档翻译 1.6 OWIN集成
- ABP官方文档翻译 1.5 多租户
- ABP官方文档翻译 1.3 模块系统
- ABP官方文档翻译 1.1 介绍
- ABP官方文档(一)【入门介绍】
- ABP官方文档(二)【多层次架构体系】
- 关于同步异步、阻塞非阻塞的理解
- 测试之代码检查错误罗列
- Android Fingerprint -- HAL层的初始化工作
- 8种对话框(Dialog)使用方法汇总
- 图像插值算法--最邻近、双线性、双三次插值
- ABP官方文档(四)【启动配置】
- Jquery append 方法在ie8不兼容问题
- gulp常见插件总结
- WebSocket+SockJs+STMOP
- ZXing 生成二维码和条形码
- jQuery
- Vue 创建项目
- UVA
- Spring配置过程 (二)面向切面编程AOP