[Architect]ABP(現代ASP.NETテンプレート開発フレームワーク)(4)起動構成

3687 ワード

このセクションのディレクトリ
  • ABP
  • を配置する.
  • Module
  • の構成
  • モジュールの構成
  • を作成する.
     
    ABPはモジュール起動時に構成機能を提供する.

    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はモジュール化に基づいて設計する.異なるモジュールでABPを構成することができる.例えば、異なるモジュールにおいてnavigation providerによりメインメニューに独立したメニュー項目が提供する.(See localization and navigation documents for details)
     

    モジュールの構成


    システム内蔵の構成に加える、1つのモジュールでIAbpModuleConfigurationsがモジュールに構成点を提供することも可能である.例:
    ...
    using Abp.Web.Configuration;
    ...
    public override void PreInitialize() 
    {
        Configuration.Modules.AbpWeb().SendAllExceptionsToClients = true;
    }
    ...

    この例では、AppWeb moduleがクライアントにすべての例外を送信ように構成する.
    各モジュールが構成を定義する必要はありません.通常、モジュールが異なるアプリケーションで再利用する場合、起動時に構成することができる.
     

    モジュールの構成の作成


    MyModuleというmoduleがあり、いくつかの構成プロパティがあるとします.まず、これらのプロパティのクラスを作成します.
    public class MyModuleConfig
    {
        public bool SampleConfig1 { get; set; }
    
        public string SampleConfig2 { get; set; }
    }

    そしてMyModuleのPreInitializeメソッドにこのクラスを登録します.(これで注入できます)
    IocManager.Register<MyModuleConfig>();
    

     
    最後に、IModuleConfigurationsの拡張方法を作成して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はこの構成を使用する必要があります.注入して使用することができます.例:
    public class MyService : ITransientDependency
    {
        private readonly MyModuleConfig _configuration;
    
        public MyService(MyModuleConfig configuration)
        {
            _configuration = configuration;
        }
    
        public void DoIt()
        {
            if (_configuration.SampleConfig2 == "test")
            {
                //...
            }
        }
    }

    これにより、ABPシステムにおいてモジュール構成を一元的に作成することができる.