Как лучше всего обрабатывать соединения Sql в длительных процессах с Ninject?
У нас есть рабочая роль Azure (в основном такая же, как у службы Windows), в которой мы используем Ninject для IoC и внедряем IDbConnection в наших сотрудников. Согласно передовому опыту, вы должны утилизировать соединение, как только вы его больше не используете, но в работнике / службе, который может иметь или не иметь смысла. Итак, что было бы хорошим способом обработки соединения с базой данных в таком сценарии?
Наши варианты включают (возможно, не ограничиваясь):
- Используя шаблон ServiceLocator и запрашивать новое соединение для каждого сообщения, которое мы обрабатываем
- Держите связь вокруг (то есть не делайте ничего с этим)
Мне тоже не нравится быть честным, и я надеялся, что было какое-то другое решение...
1 ответ
Я исключу шаблон ServiceLocator (анти). По моему мнению, используя концепцию NInject Provider<ISomething>
будет соответствовать вашим потребностям. По сути, провайдер является своего рода фабрикой, возвращающей вам соединение, которое вы можете использовать, возможно, в using
объем. Если вы хотите быть более независимым от IoC, вы можете, например, IConnectionFactory
как это:
interface IConnectionFactory{
IDbConnection Open();
}