我發佈了這個論壇之前搜索了一下這個論壇,因爲我推測它已經被打死了 - 但是因爲我沒有看到任何看起來很清楚的結果,所以我想我會給它一個鏡頭。以前有回答的可能性很高,但我沒有偶然發現一個明確的網頁。RavenDB與IoC/DI - IDocumentStore或我(異步)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
}
}
但隨後的更具體的會議usecases會出現如...
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
}
除了偏好還有什麼區別嗎?我最初的想法是,使用IDocumentSession
和IAsyncDocumentSession
是更好的生命週期管理,但我可能是錯的。
我使用.NET核心2.0.3與StructureMap與烏鴉DB 4.0(40023
)明確,但我斷定,這可以適用於任何配置和任何版本。