转载

基于DDD的现代ASP.NET开发框架--ABP系列之5、ABP启动配置

点这里进入ABP系列文章总目录

基于DDD的现代ASP.NET开发框架--ABP系列之5、ABP启动配置

ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称。

ABP的官方网站 http://www.aspnetboilerplate.com

ABP在Github上的开源项目: https://github.com/aspnetboilerplate

本文由  东莞 -天道  提供翻译  

译者注:在看这一节的内容之前,建议大家先下载module-zero这个例子代码,这个例子就是一个用户和角色的模块,并且使用的实例。配置在每一个应用中都可能会有,比如你有一个网站,你要获取网站的一些自定义基本参数,比如logo位置,网站名称,上传文件大小等等。模块化的配置方式和我们之前的做法肯定是不同的,大家要注意。之前无非就是一个方法getconfig从对应的表取数据,然后使用。

在应用启动之前,abp框架提供了模块基本的配置和方法,大家参照下面这个例子就可以了。

配置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框架来进行配置。举个例子吧,不同的模块都可以添加导航,通过导航添加菜单项到自己定义的主菜单,具体的细节大家可以参照:

  • 本地化: http://www.aspnetboilerplate.com/Pages/Documents/Localization
  • 导航: http://www.aspnetboilerplate.com/Pages/Documents/Navigation

配置模块

和.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来得到配置的引用。如下代码:

基于DDD的现代ASP.NET开发框架--ABP系列之5、ABP启动配置

译者注:模块配置是一个静态类,因为我们需要重复使用它。静态方法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

基于DDD的现代ASP.NET开发框架--ABP系列之5、ABP启动配置

点这里进入ABP系列文章总目录

正文到此结束
Loading...