gpt4 book ai didi

c# - IHttpModule 和控制台应用程序的流畅 NHibernate 模式

转载 作者:行者123 更新时间:2023-11-30 17:17:42 26 4
gpt4 key购买 nike

我目前有一个在存储库模式中使用 Fluent NHibernate (+ LINQ) 的 C# MVC 2 网络应用程序,我正在使用 Ninject 来处理 MVC Controller 的构造函数要求,即它在存储库中传递。

我的 Fluent NHibernate 代码目前已连接到 IHttpModule,因此可以使用 Web 请求打开和关闭 session 。

在我尝试将我的域模型挂接到控制台应用程序之前,这非常有用。

首先,我决定将我的数据库逻辑转移到我的领域模型中。我猜这是不好的行为,但我在这里寻求代码设计方面的帮助,所以请随时提出建议。我想这样做是因为我想在此域模型上编写一个控制台应用程序 + 网络应用程序,而不关心数据存储在何处或如何存储。也许我应该有一个单独的“基础设施”项目,它使用域模型来执行特定的实现?

回到问题……我遇到了一个问题,似乎 Fluent NHibernate 的 GetCurrentSession() 假设您正在使用网络 - 它崩溃了,我得到了一些 NH 代码的回溯,其中提到了 WebSession。

为了引用,代码在这里:https://github.com/cthielen/RightsManagement .

我很抱歉没有太具体;我正在寻找代码设计建议以最好地处理 FNH + Linq 的存储库模式,该模式适用于 Web 和控制台应用程序 - 并分别询问我的数据库连接(即 NH 逻辑)是否应该在域项目中或不是。

最佳答案

这是个好问题。有很多不同的方法可以回答这个问题,但每个答案都将取决于您对不同方法的经验。例如,您熟悉 TDD 吗?依赖注入(inject)?国际奥委会容器?等等。

此时我能给出的最佳建议是清理所有现有类,使它们不依赖于上下文。这方面的一个例子是修改您的存储库类,以便它们将 ISession 对象作为构造函数参数,而不是依赖于似乎仅在您处于 HTTP 上下文中时才存在的单例实例。这将允许您将 session 创建逻辑重构到域逻辑之外的更高级别。

public class PeopleRepository {
public PeopleRepository(ISession session) {
// store session
}
}

在我的例子中,我会使用 IoC 容器来注入(inject) session 依赖项。我可以在任何类型的应用程序中使用此容器,无论它是基于 Web 的应用程序(使用每次请求 session 模式还是控制台应用程序)。

要使 NHibernate 在这两个应用程序中都能正常运行,您需要做一些工作。挑战在于尽可能减少这项工作。

我很乐意提供更多指导。让我知道。

关于c# - IHttpModule 和控制台应用程序的流畅 NHibernate 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6286596/

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