zoukankan      html  css  js  c++  java
  • ABP框架

    文档目录

    本节内容:

    ABP在启动时,提供基础框架和模型来配置和模块化。

    置ABP

    在预初始化事件中进行配置,示例:

    kid1412注:XmlLocalizationSource这个类已经被作者删除,具体方法参考后面的“本地化”文档。--2016年11月09日 11:40 PM。

    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。例如,不同的模块都能添加导航提供器把自己的菜单项加入到主菜单中。(细节参见本地化和导航文档)

    替换内置服务

    Configuration.ReplaceServices方法可以用来重写一个内置服务。例如,你可以用自定义的实现替换IAbpSession服务,如下所示:

    Configuration.ReplaceService<IAbpSession, MySession>(DependencyLifeStyle.Transient);

    ReplaceServices方法有一个重载,用自定义方式传递一个Action来替换。(你可以直接使用Castle Windsor的高级注册API)。

    同一个服务可以被替换多次(尤其在不同的模块里)。最后一次替换的那个才可用(如你所知,模块预初始化方法是按依赖关系顺序被执行)。

    配置模块

    除了框架自身的启动配置,一个模块可扩展IAbpModuleConfigurations接口来提供配置切入点,例如:

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

    例子中,我们配置了用AbpWebCommon模块负责发送异常给客户端。

    不是每个模块都应该定义此类的配置。一般只有当为一个可重用于其它应用而写的模块时,才需要在启动时配置。

    为一个模块创建配置

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

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

    然后,在依赖注入的预初始化事件里注册这个类:

    IocManager.Register<MyModuleConfig>();

    在本例中,它应该注册成单例,现在我们可以使用下面的代码,在我们模块的PreInitialize方法中配置MyModule:

    Configuration.Get<MyModuleConfig>().SampleConfig1 = false;

    此时我们可以使用IAbpStartupConfiguration.Get方法,如下所示,我们可以给IModuleConfigurations创建一个扩展方法:

    public static class MyModuleConfigurationExtensions
    {
        public static MyModuleConfig MyModule(this IModuleConfigurations moduleConfigurations)
        {
            return moduleConfigurations.AbpConfiguration.Get<MyModuleConfig>();
        }
    }

    现在,其它模块可以使用这个扩展方法置这个模块:

    Configuration.Modules.MyModule().SampleConfig1 = false;
    Configuration.Modules.MyModule().SampleConfig2 = "test";

    这样就很容易在一个单独的地方检查模块的配置并集中它们(Configuration.Modules...)。ABP已为自身的模块配置定义了扩展方法。

    在某些情况,MyModule可以像下面这样配置,注入MyModuleConfig并使用配置值:

    public class MyService : ITransientDependency
    {
        private readonly MyModuleConfig _configuration;
    
        public MyService(MyModuleConfig configuration)
        {
            _configuration = configuration;
        }
    
        public void DoIt()
        {
            if (_configuration.SampleConfig2 == "test")
            {
                //...
            }
        }
    }

    因此,可以在ABP系统中为模块创建配置中心。

  • 相关阅读:
    [国嵌笔记][001-003][嵌入式系统概述]
    世界第一魔法师
    详解CSS display:inline-block的应用(转)
    详解CSS float属性(转)
    CSS代码重构与优化之路(转)
    未能加载文件或程序集“XXX”或它的某一个依赖项。试图加载格式不正确的程序。(转)
    【总结整理】display与position之间的关系【较完整】(转)
    css知多少(11)——position(转)
    【总结整理】行内标签span设置position:absolute/float属性可以设置宽度与高度
    【总结整理】display、visibility、overflow的隐藏问题
  • 原文地址:https://www.cnblogs.com/kid1412/p/5975791.html
Copyright © 2011-2022 走看看