zoukankan      html  css  js  c++  java
  • ABP理论学习之启动配置

    返回总目录


    本篇目录

    为了在应用启动时配置ABP和模块,ABP提供了一个基础设施。

    配置ABP###

    配置ABP是在模块的PreInitialize事件中完成的。下面的代码摘自Github上的Taskever(一个任务系统Demo):

    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。比如,不同的模块可以通过添加导航提供者来给主菜单添加自己的菜单选项。

    配置模块###

    除了ABP框架自身的启动配置之外,模块也可以实现IAbpModuleConfigurations接口来为模块提供配置点。比如:

    ...
    using Abp.Web.Configuration;
    ...
    public override void PreInitialize() 
    {
        Configuration.Modules.AbpWeb().SendAllExceptionsToClients = true;
    }
    ...
    
    

    在本例中,我们配置了AbpWeb模块,目的是将所有的异常发送到客户端。

    并不是每一个模块都应该定义这种类型的配置。一般是当一个模块需要在不同的应用中重用的时候,才需要在启动时进行配置。

    为模块创建配置###

    假设我们有一个叫做“MyModule”的模块,它有一些配置属性。首先,我们为这些配置属性创建一个类MyModuleConfig:

    public class MyModuleConfig
    {
        public bool SampleConfig1 { get; set; }
    
        public string SampleConfig2 { get; set; }
    }
    
    
    

    然后,我们在MyModule的PreInitialize事件中将这个类MyModuleConfig注册到DI中(这样,MyModuleConfig就成为了可注册的类):

    IocManager.Register<MyModuleConfig>();
    
    

    最后,我们创建IModuleConfiguration的扩展方法来获得MyModuleConfig的引用。

    public static class MyModuleConfigurationExtensions
    {
        public static MyModuleConfig MyModule(this IModuleConfigurations moduleConfigurations)
        {
            return moduleConfigurations.AbpConfiguration
                .GetOrCreate("MyModuleConfig",
                    () => moduleConfigurations.AbpConfiguration.IocManager.Resolve<MyModuleConfig>()
                );
        }
    }
    
    

    现在,在应用启动时,其他的模块就可以配置这个模块了(在需要配置MyModule的模块的PreInitialize事件中):

    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系统中,模块就可以创建集中配置点了,也就是说模块可以集中起来配置了。

  • 相关阅读:
    docker 基于现有镜像修改后保存,上传私有仓库
    新装docker 从本地仓库下载
    decode_json 必须是unicode形式的字符
    浅谈消息队列的原理及优势
    javascript基础修炼(10)——VirtualDOM和基本DFS
    消息队列属性及常见消息队列介绍
    【Angular专题】——【译】Angular中的ForwardRef
    单体应用微服务改造实践
    SpringCloud微服务2-服务提供者和消费者
    基于CSE的微服务工程实践-Native API先行
  • 原文地址:https://www.cnblogs.com/farb/p/ABPStartupConfig.html
Copyright © 2011-2022 走看看