入門
各アプリケーションは、いくつかの設定を保存し、アプリケーションのどこかでこれらの設定を使用する必要があります。ABPは、記憶/検索アプリケーションサーバ及びクライアント使用可能であり、テナント及びユーザレベルのための強力な基盤を提供します。
文字列値のペア - 設定は、典型的には、データベース(または他のデータソース)に格納された名前です。私たちは、文字列以外の値を変換した文字列にそれを保存することができます。
ISettingStoreについて
システム設定を使用するには、ISettingStoreインタフェースを実装する必要があります。けれども、私たちは、独自の方法でそれを実装することができますが、それは完全にモジュールゼロプロジェクトで実装されています。あなたが気付いていない場合は、アプリケーションの構成ファイル(web.configファイルまたはapp.configを)から設定を読み込みます。しかし、これらの設定を変更することはできません。また、それは範囲を限定するために動作しません。
カスタム設定
設定は、使用する前に定義する必要があります。ABPは、モジュール式になるように設計されているので、異なるモジュールは異なる設定を有することができます。モジュールは、その設定を定義するために、SettingProviderクラスから派生するように作成する必要があります。例えば:
パブリック クラスMySettingProvider:SettingProvider { 公共 オーバーライドのIEnumerable <SettingDefinition> GetSettingDefinitions(SettingDefinitionProviderContextコンテキスト) { 戻り 新しい[] { 新SettingDefinition( " SmtpServerAddress " 、 " 127.0.0.1 " )、 新しいSettingDefinition( " PassiveUsersCanNotLogin " 、 " 真の" 、 スコープ:SettingScopes.Application | SettingScopes.Tenant )、 新しいSettingDefinition( " SiteColorPreference " 、 " 赤" 、 スコープ:SettingScopes.User、 clientVisibilityProvider:新しいVisibleSettingClientVisibilityProvider() ) ;} } }
GetSettingDefinitions方法はSettingDefinition対象のクラスは、コンストラクタでSettingDefinitionパラメータを持って返します。
- 名前名前(必須):名前を設定する独自のシステム全体でなければなりません。頻繁に文字列の変更の代わりに文字列定数を使用してみてください。
- デフォルト値:デフォルト値を持っている必要があり、デフォルト値はnullまたは空の文字列かもしれません。
- スコープ:設定の範囲を定義する必要があります。
- 表示名表示名:ローカライズされた文字列は、後のUIに表示名を設定するために使用することができます。
- 説明説明:ローカライズされた文字列は、後UIの表示設定を記述するために使用されてもよいです。
- グループグループ:グループのセットを使用することができます。これが唯一のUIのため、管理を設定するために使用されていないされています。
- ClientVisibilityProvider:それは、クライアントが提供されているかどうかを決定するために使用することができます。
- isInherited:この設定は、テナントとユーザによって継承するかどうかを決定するために使用される(設定範囲の項を参照)。
- customData:カスタム・データ・セットの設定を定義するために使用することができます。
設定プロバイダを作成した後、それはモジュールのPreIntialize方法に登録する必要があります。
Configuration.Settings.Providers.Add <MySettingProvider>();
注入セットは自動的に依存プロバイダによって登録されています。セットプロバイダは、定義された設定を構築するために他のソースを使用するように、依存関係(例えば、店舗)を注入することができます。
レンジ設定(設定範囲)
SettingScopes列挙列挙三の設定範囲(またはレベル)を定義
- アプリケーション(アプリケーション):適用範囲は、ユーザ/テナントセットの独立して設けられています。例えば、我々は電子メールを送信するときに、サーバーを取得するには、「SmtpServerAddress」の設定と呼ばれるIPアドレスを定義することができます。設定は唯一の値である場合、(ユーザに応じて変化しない)、我々は、適用範囲として定義することができます。
- テナント(テナント):アプリケーションがマルチテナントであれば、我々は特定のテナントの設定を定義することができます。
- ユーザー:私たちは/ストアユーザーの範囲のセットを使用し、各ユーザーの設定に固有の値を取得することができます。
フラグsettingscope列挙型プロパティを持って、我々は、提供した複数の範囲を定義することができます。
(あなたがfalseに設定されて継承していない限り)デフォルトでは、設定範囲は階層的です。例えば、我々が設定した範囲定義した場合、「アプリケーション|テナント|ユーザー」、およびこの設定の現在の値を取得しよう:
•ユーザ定義(カバー)、ユーザ固有の値ならば、我々は値を取得します。
•ない場合は、それがテナント(カバレッジ)のように定義されている場合、我々はテナント固有の値を取得します。
そうでない場合•アプリケーション値は、我々が定義を取得します。
•そうでない場合、我々はデフォルト値を取得します。
デフォルト値はnullまたは空の文字列かもしれません。これは、可能な限りセットのデフォルト値を提供することを提案しました。
サーバー(サーバー側)
挿入マネージャー
設定操作を実行するためのISettingManager。私たちは、アプリケーション内のどこにでもそれを注入して使用することができます。ISettingManagerは、値のセットを取得するメソッドの数を定義します。
最も一般的な方法は、GetSettingValue(または非同期呼び出しGetSettingValueAsync)です。これは、デフォルト値、アプリケーション、ユーザ設定に基づいて、および(記載予め設定範囲として)テナント設定電流値を返しています。例えば:
// ブール値(非同期呼び出し)取得 するvar VALUE1を= のawait SettingManager.GetSettingValueAsync < ブール値 >(" PassiveUsersCanNotLogin " ); // 文字列値(同期呼び出し)取得 するvar値2 = SettingManager.GetSettingValue(" SmtpServerAddressを");
上記に示したように、GetSettingValueおよび汎用非同期バージョンでは、ユーザーのリストまたは特定のテナントや設定値のすべての設定値を取得するための、いくつかの方法があります。
ISettingManagerが広く用いられているので、いくつかの特別な基底クラスプロパティの(例えばApplicationService、のDomainServiceとAbpController)はSettingManagerと呼ばれます。私たちは、これらのクラスから派生した場合は、明示的にそれを注入する必要はありません。
ISettingDefinitionManager
ISettingDefinitionManagerも定義定義AppSettingProviderを取得するために提供されてもよいです。また、注入したアプリケーションのどこにでもそれを使用することができます。ように定義名、デフォルト値、表示名、およびを得るISettingDefinitionManagerを使用してください。
クライアント
ClientVisibilityProviderは、クライアントによって設定された可視属性の定義を決定する設定してください。ISettingClientVisibilityProviderが達成4があります。
- VisibleSettingClientVisibilityProvider:設定は、クライアントが見え定義しています。
- HiddenSettingClientVisibilityProvider:定義されたクライアントに隠された設定。
- RequiresAuthenticationSettingClientVisibilityProvider:ユーザーがログインすると、設定は、クライアントが見え定義しています。
- RequiresPermissionSettingClientVisibilityProvider:ログインユーザが特定の権限を持っている場合は、設定は、クライアントが見え定義しています。
クライアントの定義された一連のセットに従ってClientVisibilityProviderが表示されている場合は、クライアント上の現在の値を取得するにはJavaScriptを使用することができます。 などの必要な機能やオブジェクトを、名前空間を定義abp.setting 。
VAR currentColor = abp.setting。取得(" SiteColorPreference ");
そこのgetIntやgetBoolean方法。あなたはすべての値を取得するためにabp.setting.valuesオブジェクトを使用することができます。我々は、サーバー上で設定を変更した場合、クライアントはページを更新しない限り、変更を知っている、またはリロードまたは手動でコードによって設定された設定を更新するためにいくつかの方法でできないことに注意してください。
設定の変更
アプリケーション、テナントユーザーが設定を変更するためISettingManagerは、それぞれ、ChangeSettingForApplicationAsync、ChangeSettingForTenantAsync及びChangeSettingForUserAsync方法(および同期バージョン)定義しました。
キャッシュについて
サーバ側の設定マネージャのキャッシュ設定は、私たちは直接、設定値を変更するリポジトリまたはデータベース更新ステートメントを使用しないでください。