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系统中为模块创建配置中心。

  • 相关阅读:
    hdu 4358 Boring counting 树状数组
    hdu 4501 小明系列故事——买年货 多重背包
    hdu 4503 湫湫系列故事——植树节 水题
    hdu 4031 Attack 树状数组
    技巧心得:如何解除运行office软件的时候弹出 正在安装 缺少pro11.msi对话框
    读书札记:VC++学习之Windows程序运行原理
    读书札记:7天搞定C语言(二)
    视频教程:计算器制作MFC
    读书札记:knowledge and Virtue
    技巧心得:各大搜索免费登记入口个人门户推广
  • 原文地址:https://www.cnblogs.com/kid1412/p/5975791.html
Copyright © 2011-2022 走看看