2017-11-18 15 views
1

私はちょっとグーグルに行って、これを掲示する前にこのフォーラムを検索しました。私はそれが死に至ったと推定していたからです - しかし、私は明確にこれを求めているような結果は見ませんでした。これまでに答えられた可能性はかなり高いですが、私はそれについての明確なページにつまずくことはありませんでした。IoC/DI付きのRavenDB - IDocumentStoreまたはI(非同期)DocumentSession?

依存性注入を使用すると、これはより良い方法と考えられますか? IDocumentStore全体を注入し、必要に応じてセッションを作成するか、適切なIDocumentSessionまたはIAsyncDocumentSessionを注入しますか?

これまで私はどこでもIAsyncDocumentSessionを注射しましたが、実際にはいくつかの場所で非asyncセッションを使用する必要があります。私がレイヴンを間違って注射していると、これは私に考えさせてくれました。

ので、IDocumentStoreを使用すると、

public AsHandler(IDocumentStore store) { RavenStore = store; } 

private IDocumentStore RavenStore { get; set; } 

public async Task Handle() { 
    using(var session = RavenStore.OpenAsyncSession()) { 
     ... // do stuff with an async session 
    } 
} 

...のようなものかもしれません。しかし、その後、より具体的なセッションのユースケースは、このような...

public AsHandler(IAsyncDocumentSession session) { RavenSession = session; } 

private IAsyncDocumentSession RavenSession { get; set; } 

public async Task Handle() { 
    // do stuff with an async session 
} 

またはそれぞれ...

ように表示されます。
public AsHandler(IDocumentSession session) { RavenSession = session; } 

private IDocumentSession RavenSession { get; set; } 

public async Task Handle() { 
    // do stuff with a non-async session 
} 

環境設定以外にも違いはありますか?私の最初の考えは、IDocumentSessionIAsyncDocumentSessionを使用すると、より良いライフサイクル管理が、私は間違っている可能性があります。

私は、具体的レイヴンDB 4.040023)とのStructureMap.NETのコア2.0.3を使用していますが、私は、これは任意の構成と任意のバージョンにも適用できることを断定う。

答えて

2

これは4.0で変更されているかどうかはわかりませんが、DocumentStoreの作成はかなり高価で重い操作と見なされていました。したがって、アプリケーションごとに1回だけ作成することをお勧めします(シングルトン;詳細はRavenDb Documentationを参照してください) 。

セッションは、作成するのがかなり安いため、必要に応じて作成することができます。

DIを使用して両方のオブジェクト(ストアとセッション)を注入し、異なるライフサイクル(シングルトンvs.過渡)を使用できます。

もちろん、DIをセットアップして、必要に応じてセッションの同期バージョンまたはasnycバージョンを提供することもできます。

関連する問題