ABP(现代ASP.NET样板开发框架)系列之五、ABP启动配置

点这里进入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框架提供了模块基本的配置和方法,你们参照下面这个例子就能够了。 网站

配置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

ABP架构设计交流群

 

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

相关文章
相关标签/搜索