【发布时间】:2017-11-18 17:59:07
【问题描述】:
我在发布之前用谷歌搜索了一下这个论坛,因为我认为它已经被打死了 - 但由于我没有看到任何似乎清楚地询问这个问题的结果,我想我会试一试。以前很有可能已经回答过了,但我没有偶然发现关于它的清晰页面。
当使用依赖注入时,哪个被认为是更好的做法?注入整个IDocumentStore,然后根据需要从中生成会话,还是注入适当的IDocumentSession 或IAsyncDocumentSession?
过去,我在各处都注入了IAsyncDocumentSession - 但实际上我需要在一些地方使用非async 会话。这让我开始思考,如果我只是完全错误地接近注入 Raven。
所以,使用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
}
除了偏好之外还有什么不同吗?我最初的想法是使用IDocumentSession 和IAsyncDocumentSession 更好地管理生命周期,但我可能错了。
我正在使用 .NET Core 2.0.3 和 StructureMap 和 Raven DB 4.0 (40023),但我会假设这可以适用于任何配置和任何版本。
【问题讨论】:
标签: dependency-injection ravendb