カスタムNinjectプロバイダを使用してRavenDB DocumentStoreをセットアップすることをおすすめします。まず、Ninjectサービスを登録するコードブロックに配置します。
kernel.Bind<IDocumentStore>().ToProvider<RavenDocumentStoreProvider>().InSingletonScope();
次に、Ninjectプロバイダを実装するこのクラスを追加します。
public class RavenDocumentStoreProvider : Provider<IDocumentStore>
{
var store = new DocumentStore { ConnectionName = "RavenDB" };
store.Conventions.IdentityPartsSeparator = "-"; // Nice for using IDs in routing
store.Initialize();
return store;
}
IDocumentStoreはシングルトンである必要がありますが、IDocumentSessionをシングルトンにしないでください。 NinjectはRavenDBと対話する必要があるときはいつでも、IDocumentStoreインスタンスでOpenSession()を使用して新しいIDocumentSessionを作成することをお勧めします。 IDocumentSessionオブジェクトは非常に軽量であり、作業単位のパターンに従い、スレッドセーフではなく、必要に応じて使用され、素早く処理されます。
他にも、セッションを開いて変更を保存するために、OnActionExecutingメソッドとOnActionExecutedメソッドをオーバーライドする基本MVCコントローラを実装することをお勧めします。ここで
+1 InRequestScope()を使用してリクエストごとにセッションを簡単に行うことができます。http://bit.ly/HJADY3 – DalSoft
SaveChanges()をどこで呼び出しますか?私は幸運とApplication_EndRequestでそれをやろうとしました。 – Andrew
SaveChanges()は、各リクエストの最後に自動的にではなく、そうするのが賢明なときに明示的に呼び出します。なぜそれをする必要があるのか、なぜ問題があるのかわかりません。私は、それが何らかの診断情報なしでは何も伝えていないのに、リクエストスコープの依存関係を持つNinjectの操作の順序と関係があると考えています。 –