点这里进入ABP系列文章总目录html
基于DDD的现代ASP.NET开发框架--ABP系列之五、ABP启动配置
git
ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称。github
ABP的官方网站:http://www.aspnetboilerplate.com架构
ABP在Github上的开源项目:https://github.com/aspnetboilerplate框架
本文由 东莞-天道 提供翻译 ide
译者注:在看这一节的内容以前,建议你们先下载module-zero这个例子代码,这个例子就是一个用户和角色的模块,而且使用的实例。配置在每个应用中均可能会有,好比你有一个网站,你要获取网站的一些自定义基本参数,好比logo位置,网站名称,上传文件大小等等。模块化的配置方式和咱们以前的作法确定是不一样的,你们要注意。以前无非就是一个方法getconfig从对应的表取数据,而后使用。模块化
在应用启动以前,abp框架提供了模块基本的配置和方法,你们参照下面这个例子就能够了。 网站
配置是经过在本身模块的PreInitialize方法中来实现的(对于module的PreInitialize方法,在上一篇中已经向你们作了简单的说明)spa
代码示例以下:.net
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框架来进行配置。举个例子吧,不一样的模块均可以添加导航,经过导航添加菜单项到本身定义的主菜单,具体的细节你们能够参照:
和.net框架原生的启动配置相比较,abp有哪些不同呢?abp框架的模块能够经过IAbpModuleConfigurations接口进行个性化的扩展,这样的话,模块配置更加简单、方便。
示例代码以下:
... using Abp.Web.Configuration; ... public override void PreInitialize() { Configuration.Modules.AbpWeb().SendAllExceptionsToClients = true; } ...
在上面这个例子中,咱们经过配置AbpWeb模块,发送异常到客户端。固然了,不是每个模块都须要这种配置,一般状况下咱们须要,是当一个模块须要在多个不一样的应用中重复使用,咱们才进行这样的配置。
以下代码,假如咱们有一个命名为MyModule的模块,而且这各模块有一些本身的配置。那么咱们首先要建立一些类,这些类定义为属性(译者注:属性有自动的get和set访问器。),表明了不一样的配置。
public class MyModuleConfig { public bool SampleConfig1 { get; set; } public string SampleConfig2 { get; set; } }
接下来,咱们经过依赖注入,注册这个类。
IocManager.Register<MyModuleConfig>(); //译者注:在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架构设计交流QQ群:134710707