モジュールVolo.Abp.Settingsを設定します

まず、モジュールのライフサイクルの定義AbpSettingsModule

SettingOptions提供ISettingDefinitionProvider、定義(ISettingDefinitionContextコンテキスト)

PreConfigureServicesモジュールでは、唯一の我々は、自動的に設定された定義に追加、ISettingDefinitionProviderを実装する必要があります。このようなメールの設定として、トラバーサルSettingDefinitionManagerのCreateSettingDefinitionsはSettingDefinitionContextを得ました

ISettingValueProviderは それぞれ、定義されたプロバイダから設けられた4つの値を提供し、デフォルトのプロバイダは、プロバイダのグローバル値、テナント値を提供して、ユーザが値を提供します

公共オーバーライドボイドPreConfigureServices(ServiceConfigurationContextコンテキスト)
        { 
            AutoAddDefinitionProviders(context.Services)。
        } 

        公共オーバーライドボイドConfigureServices(ServiceConfigurationContextコンテキスト)
        { 
            設定<SettingOptions>(オプション=> 
            { 
                options.ValueProviders.Add <DefaultValueSettingValueProvider>(); 
                options.ValueProviders.Add <GlobalSettingValueProvider>(); 
                options.ValueProviders.Add <TenantSettingValueProvider>( ); 
                options.ValueProviders.Add <UserSettingValueProvider>(); 
            }); 
        }

        プライベートの静的な無効AutoAddDefinitionProviders(IServiceCollectionサービス)
        { 
            VARのdefinitionProviders =新しいリスト<タイプ>(); 

            services.OnRegistred(コンテキスト=> 
            { 
                IF(typeof演算(ISettingDefinitionProvider).IsAssignableFrom(context.ImplementationType))
                { 
                    definitionProviders.Add(context.ImplementationType); 
                } 
            })。

            services.Configure <SettingOptions>(オプション=> 
            { 
                options.DefinitionProviders.AddIfNotContains(definitionProviders); 
            }); 
        }

二、SettingProviderメインエントランス、コンストラクタのオプションで、サービス・プロバイダ、settingDefinitionManager、settingEncryptionService

       メインプロパティ値を得るために

       パブリック仮想非同期タスクの<string> GetOrNullAsync(文字列名)
        { 
//获取属性值 VAR設定= SettingDefinitionManager.Get(名); VARプロバイダ=列挙 .Reverse(Providers.Value)。
IF(setting.Providers.Any()) { プロバイダ= providers.Where(P => setting.Providers.Contains(p.Name))。 } // TODO:setting.IsInheritedを実装する方法は? VaRの値は= GetOrNullValueFromProvidersAsync(プロバイダ、設定)を待ちます。
//加密 (setting.IsEncrypted)であれば { 値= SettingEncryptionService.Decrypt(設定値)。 } 戻り値。 }

  

  タスク<ストリング> GetOrNullValueFromProvidersAsync(非同期(async)仮想保護
            のIEnumerable <ISettingValueProvider>プロバイダ、
            SettingDefinition設定)
        { 
//遍历对应值提供プロバイダー、获取对应的值 のforeach(プロバイダにおけるVARプロバイダ) { VAR値= provider.GetOrNullAsync(設定)を待ちます。 もし(!値= NULL) { 戻り値; } } はnullを返します。 }

  

ドメインモデリングの知識

1、最初のクライアントが暗号化されたか否かを、表示リストを提供し、ユーザ定義のプロパティができるかどうか、名、表示名、説明、デフォルト値として、settingdefinition構成定義を決定します

2、settingdefinitionContextコンテキスト、定義SettingDefinition構成、ストレージ構成辞書の定義を提供する辞書<文字列、SettingDefinition> 

3、SettingDefinitionProviderプロバイダ、コンフィギュレーションコンテキストが定義定義(ISettingDefinitionContextコンテキスト)

たとえば、メール設定のコンテキストで  

 内部 クラスEmailSettingProvider:SettingDefinitionProvider 
    { 
        公共 オーバーライド ボイド(ISettingDefinitionContextコンテキスト)を定義
        { 
            context.Add(
                新しい SettingDefinition(EmailSettingNames.Smtp.Host、" 127.0.0.1 " )、
                  SettingDefinition(EmailSettingNames.Smtp.Port、" 25 " )、
                 新しいですSettingDefinition(EmailSettingNames.Smtp.UserName)、
                 新しい SettingDefinition(EmailSettingNames.Smtp.Password、のIsEncrypted:)、
                新しいSettingDefinition(EmailSettingNames.Smtp.Domain)、
                 新しい SettingDefinition(EmailSettingNames.Smtp.EnableSsl、" " )、
                  SettingDefinition(EmailSettingNames.Smtp.UseDefaultCredentials、" " )、
                  SettingDefinition(EmailSettingNames.DefaultFromAddress、" noreply ABP @。 IO " )、
                  SettingDefinition(EmailSettingNames.DefaultFromDisplayName、" ABPアプリ" 
            ); 
        } 
    }

 4、プロバイダー構成はISettingValueProvider、プロバイダの複数の値、など

     1)デフォルトのプロバイダは、構成が定義され得ます

     2)グローバルプロバイダー、ISettingStoreから値はProviderName =「グローバル」を得ます

     3)値は、providerNameに=テナント、providerKey = CurrentTenant.Id ISettingStoreからの取得テナント?.ToString()

     4 ISettingStore、providerNameで=ユーザから値を得る)ユーザ、providerKey = CurrentUser.Id.ToString()

5、settingdefinitionManager管理、定義はすべての設定1を定義するコンフィギュレーションへのアクセスは)全てDefinitionProviders、コンテキストコンフィギュレーションを初期化settingdefinitionContext

    

公共SettingDefinitionManager(
            IOptions <SettingOptions>オプション、
            IServiceProviderサービス・プロバイダ)
        { 
            のServiceProvider =サービス・プロバイダ。
            オプション= options.Value。

            SettingDefinitions =新しいレイジー<IDictionaryを<文字列、SettingDefinition >>(CreateSettingDefinitions、真の); 
        } 

 保護された仮想たIDictionary <ストリング、SettingDefinition> CreateSettingDefinitions()
        { 
            VARの設定=新しい辞書<文字列、SettingDefinition>(); 

            使用(VARスコープ= ServiceProvider.CreateScope())
            { 
                VARプロバイダ=オプションを
                    .DefinitionProviders
                    .Select(ISettingDefinitionProviderとしてP => scope.ServiceProvider.GetRequiredService(P))
                    .ToList(); 

                foreachの(プロバイダにおけるVARプロバイダ)
                { 
                    provider.Define(新しいSettingDefinitionContext(設定))。
                } 
            } 

            設定を戻します。
        }

  

 

おすすめ

転載: www.cnblogs.com/cloudsu/p/11161834.html