如何使用IoC注入开放式连接

时间:2009-11-20 16:00:07

标签: c# .net dependency-injection unity-container ioc-container

首先,我的方案。我有一个服务,BillingService,有一个像这样的构造函数:

BillingService(IInstallmentService,IBillingRepository)

InstallmentService有一个类似于

的构造函数

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);

}

2 个答案:

答案 0 :(得分:0)

我对Unity没有多少经验,但我会将连接详细信息保存到您的BillingRepository,并通过属性将打开的连接传递给其他对象。

因此,在您的容器中创建一个返回BillingRepository对象的属性,然后您可以通过任何其他对象中的该属性访问您的打开连接。

答案 1 :(得分:0)

我在BillingRepository中引入了对连接的依赖,就像你的例子一样,但是让Unity创建连接。

确保BillingRepository实现IDisposable(也可能是计费服务),并将其设置为临时对象(不过在Unity中表示)。

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