0

RavenDB をデータストアとして使用する MVC4 アプリケーションがあります。アプリケーションには、MVC/Web、ドメイン、データ、およびセキュリティ レイヤーがあります。

データベースを初期化し、DocumentStore にアクセスする必要があるカスタム メンバーシップとロール プロバイダーを作成しています。セキュリティ層からこれらのクラスを作成しており、シングルトン DocumentStore (アプリケーションで設定) を使用したいのですが、アクセス方法がわかりません。

その他、RavenDB のカスタム プロバイダーを作成する例として、Provider.Initialize() メソッド内で新しい DocumentStore インスタンスを作成していますが、これはサーバーごとに 1 つの DocumentStore を持つという規則に違反しているようです。

現在、Application_Start() で RavenDB DocumentStore のインスタンスを 1 つ作成しています。DocumentStore.Session(s) を処理する MVC/Web レイヤーに基本コントローラーがあります。

これを達成する方法はありますか?単純化するために、セキュリティ ロジックを MVC/Web レイヤーに移動する必要がありますか?

4

2 に答える 2

1

おそらく、TinyIoC のような自動ツールを使用するか、これを手動で行うことにより、ある種の依存性注入を使用したいと思うでしょう。

たとえば、RaccoonBlog がこれをどのように行っているかをご覧ください。最初に、Application_Start で DocumentStore インスタンスを作成し、その参照をさまざまな基本クラスの静的変数に格納します。

https://github.com/ayende/RaccoonBlog/blob/master/RaccoonBlog.Web/Global.asax.cs#L66

次に、新しいセッションが開始されるたびに、新しい Session オブジェクトを挿入します。

https://github.com/ayende/RaccoonBlog/blob/master/RaccoonBlog.Web/Global.asax.cs#L31

そして、このアイテムは Controller ベースクラスからプルされています:

https://github.com/ayende/RaccoonBlog/blob/master/HibernatingRhinos.Loci.Common/Controllers/RavenController.cs#L16

適切な IoC を使用するか、少なくとも Items ディクショナリを使用せずに、これをもう少しうまく実行できたはずですが、要点はわかります。

DocumentStore をどこかパブリックに保持し、オープン セッションを基底クラスに注入するだけです。

于 2013-10-13T13:31:43.863 に答える