gpt4 book ai didi

c# - 如何使用 IoC 注入(inject)打开的连接

转载 作者:太空宇宙 更新时间:2023-11-03 16:56:21 28 4
gpt4 key购买 nike

首先,我的场景。我有一个服务,BillingService,有一个这样的构造函数:

计费服务(IInstallmentService,IBillingRepository)

InstallmentService 有一个看起来像这样的构造函数

安装服务(IBillingRepository,IInstallmentCalculator)

我的计费服务是一个应用程序服务,方法将协调移动部分之间的操作。一切都在我的 IoC 容器中注册,因此我的外观只需要解析 IBillingService 并调用该操作。

我的BillingService和分期付款服务都需要访问BillingRepository。我应该只需要打开一个数据库连接,所以理想情况下 BillingRepository 会在构造函数中采用 IDbCONnection。

我的问题是,如何从我的容器中获取一个打开的连接并传递到我的 BillingRepository 中,然后在我的 BillingService 处理完它之后有效地关闭它?我在这个客户端坚持使用 Unity。如果我手写这个,它看起来像这样:

using(IDbConnection conn = DbFactory.GetConnection())
{
IBillingRepository repo = new BillingRepository(conn);
IInstallmentCalculator calc = new InstallmentCalculator();
IInstallmentService installmentService = new InstallmentService(repo,calc);
IBillingService billService = new BillingService(installmentService, repo);

billService.DoSomething(parameters);

}

最佳答案

我会在 BillingRepository 中引入对连接的依赖,就像在您的示例中一样,但让 Unity 创建连接。

确保 BillingRepository 实现了 IDisposable(也可能是计费服务),并将其设置为 transient 对象(无论如何在 Unity 中表示)。

如果计费存储库维护一些需要更长生命周期的状态(例如,对于应用程序的生命周期),我会将其分解到另一个类中,并使计费存储库也依赖于它。

关于c# - 如何使用 IoC 注入(inject)打开的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1771443/

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