gpt4 book ai didi

dependency-injection - 带有 IoC/DI 的 RavenDB - IDocumentStore 或 I(Async)DocumentSession?

转载 作者:行者123 更新时间:2023-12-04 08:20:08 24 4
gpt4 key购买 nike

我在 google 上搜索了一下,在发布这个之前搜索了这个论坛,因为我假设它已经被打死了 - 但因为我没有看到任何似乎明确询问这个问题的结果,我想我会试一试。很有可能之前有人回答过这个问题,但我没有偶然发现关于它的清晰页面。

当使用依赖注入(inject)时,哪个被认为是更好的做法?注入(inject)整个 IDocumentStore 然后根据需要从中生成 session ,或者注入(inject)适当的 IDocumentSessionIAsyncDocumentSession

过去,我在所有地方都注入(inject)了 IAsyncDocumentSession - 但后来发现我实际上需要在一些地方使用非 async session 。这让我开始思考我是不是完全错误地注入(inject)了 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
}
}

但是随后会出现更具体的 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 是更好的生命周期 管理,但我可能错了。

我正在使用 .NET Core 2.0.3StructureMap 以及 Raven DB 4.0 (40023) ,但我认为这可以适用于任何配置和任何版本。

最佳答案

不确定这在 4.0 中是否有所改变,但到目前为止,DocumentStore 的创建被认为是一项相当昂贵/繁重的操作,因此建议的方法是每个应用程序只创建一次(单例;有关更多详细信息,请参阅 RavenDb Documentation ).

另一方面, session 的创建成本相当低,因此可以根据需要创建。

您仍然可以使用 DI 注入(inject)两个对象(存储和 session ),并只使用不同的生命周期(单例与 transient )。

当然,您也可以设置 DI 以根据需要提供 session 的同步版本或异步版本。

关于dependency-injection - 带有 IoC/DI 的 RavenDB - IDocumentStore 或 I(Async)DocumentSession?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47361627/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com