gpt4 book ai didi

c# - 设计依赖注入(inject)和单个数据上下文的重用

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

我目前刚刚开始实现依赖注入(inject),因此我可以开始测试我的代码,并且遇到了很多次我无法弄清楚的问题。

我目前的案例场景:

我有一个类 ( foo.cs ),它在 Windows 服务运行的整个过程中都处于事件状态。它负责轮询数据库以获取新消息,然后将它们发送出去并更新数据库以反射(reflect)发送成功。

我的问题是 foo.cs 依赖于数据访问(消息存储库 - linq-to-sql 数据上下文),因此它通过构造函数注入(inject),其生命周期范围与 foo 相同。我在任何地方读到它都说数据上下文生命周期应该是一个单一的工作单元。因此,就像我需要注入(inject)我想要使用的实际类型并在每次我想在 foo 中执行单个工作单元时构建它,而不是传入一个已经构建的存储库,该存储库在整个服务期间都保持事件状态。

最佳答案

一种可能性:不要在构造期间直接为 Foo 类提供数据上下文,而是为其提供数据上下文“工厂”类/接口(interface),以实现在每次调用时创建新数据上下文的方法。

**编辑**

如果我的描述不清楚,这里是我的意思的草图:

interface IDataContextFactory
{
??? CreateContext();
}

class DataContextFactory : IDataContextFactory
{
public ??? CreateContext()
{
// Create and return the LINQ data context here...
}
}

class Foo
{
IDataContextFactory _dataContextFactory;

public Foo(IDataContextFactory dataContextFactory)
{
_dataContextFactory = dataContextFactory;
}

void Poll()
{
using (var context = _dataContextFactory.CreateContext())
{
//...
}
}
}

关于c# - 设计依赖注入(inject)和单个数据上下文的重用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3504079/

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