如何使用Ninject在长时间运行的进程中最好地处理Sql连接

本文关键字:处理 连接 Sql 进程 Ninject 何使用 长时间 运行 | 更新日期: 2023-09-27 18:12:01

我们有一个Azure Worker角色(基本上与Windows Service相同),我们使用Ninject进行IoC,并将IDbConnection注入到我们的Worker中。最佳实践表明,您应该在不再使用连接时立即处理该连接,但在工作线程/服务中处理该连接可能有意义,也可能没有意义。那么在这种情况下处理数据库连接的好方法是什么呢?

我们的选项包括(也许不限于):

  • 使用ServiceLocator模式并在我们处理的每条消息上请求一个新连接
  • 保持连接(即不做任何事情)

老实说,我两个都不喜欢,我希望有其他的解决方案。

如何使用Ninject在长时间运行的进程中最好地处理Sql连接

我将排除ServiceLocator (anti)模式。在我看来,使用Provider<ISomething>的NInject概念将符合您的需要。基本上,提供者是一种为您返回可以使用的连接的工厂,可能在using作用域中。如果你想更独立于"IoC gotcha",你可以有一个IConnectionFactory,例如:

interface IConnectionFactory{
           IDbConnection Open();
}