• ABP之启动配置


    ASP.NET Boilerplate提供了在StartUp中配置其模块的基础设施和模型。

    配置ASP.NET Boilerplate

    配置ABP是在模块的PreInitialize 方法中做的,如下所示:

    public class SimpleTaskSystemModule : AbpModule
    {
        public override void PreInitialize()
        {
            //Add languages for your application
            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"));
    
            //Add a localization source
            Configuration.Localization.Sources.Add(
                new XmlLocalizationSource(
                    "SimpleTaskSystem",
                    HttpContext.Current.Server.MapPath("~/Localization/SimpleTaskSystem")
                    )
                );
    
            //Configure navigation/menu
            Configuration.Navigation.Providers.Add<SimpleTaskSystemNavigationProvider>();        
        }
    
        public override void Initialize()
        {
            IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());
        }
    }

    ABP的设计考虑到了模块化,可以配置不同的模块。比如模块可以添加导航提供者在主菜单中添加自己的菜单项(有关配置它们的详细信息,请参阅本地化和导航文档)。

    取代内置服务

    Configuration.ReplaceService方法可用于重写内置服务,例如,我们可以用自定义实现替换IAbpSession服务,如下所示:

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

    ReplaceService方法有一个重载,通过一个动作以定制的方式进行替换(我们可以直接使用Castle Windsor及其高级注册API)。

    相同的服务可以被多次替换,特别是在不同的模块中。最后一个替换的是有效的那个。按照依赖顺序执行模块PreInitialize方法。

    配置模块

    除了框架自己的启动配置之外,模块还可以扩展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; }
    }

     然后,我们通过抵赖注入将这个类注册到MyModule的预初始化方法中(因此,它将是可注入的):

    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")
            {
                //...
            }
        }
    }

    通过这种方式,模块可以在ASP.NET Boilerplate中创建中心配置点。。。

    :

  • 相关阅读:
    1407251735-hd-美素数.cpp
    [Javascript] IO Functor
    [AngularJS] Test an Angular Component with $componentController
    [AngularJS] Isolate State Mutations in Angular Components
    [Jest] Track project code coverage with Jest
    [Javascript] Either Functor
    [Javascript] Maybe Functor
    [AngualrJS] ng-strict-di
    [Ramda] Simple log function for debugging Compose function / Using R.tap for logging
    [Jest] Test JavaScript with Jest
  • 原文地址:https://www.cnblogs.com/yixuanhan/p/9521830.html
Copyright © 2020-2023  润新知