редактирование (не автором): существует всесторонний список платформ МОК, доступных в https://github.com/quozd/awesome-dotnet/blob/master/README.md#ioc:
Исходный ответ следует.
я предполагаю, что мог бы быть немного придирчивым здесь, но важно отметить, что DI (Внедрение зависимости) является шаблоном программирования и упрощен, но не требует, МОК (Инверсия Управления) платформа. Платформы МОК просто делают DI намного легче, и они обеспечивают хост других преимуществ свыше DI.
Однако я уверен, что это - то, что Вы спрашивали. О Платформах МОК; я раньше использовал Spring. Сеть и CastleWindsor много, но реальная боль в позади был всем, что противные XML конфигурируют Вас, должен был записать! Они в значительной степени все перемещают этот путь теперь, таким образом, я использовал StructureMap в течение прошлого года или так, и так как он переместился в быструю конфигурацию с помощью дженериков со строгим контролем типов и реестра, мой барьер боли в использовании МОК спал ниже нуля! Я вытаскиваю абсолютный удар из знания теперь, когда моя конфигурация МОК проверяется во время компиляции (по большей части), и у меня была только радость с StructureMap и его скоростью. Я не скажу, что другие были медленными во времени выполнения, но они были более трудными для меня установить, и разочарование часто выигрывало день.
Обновление
я использовал Ninject на моем последнем проекте, и это было абсолютное удовольствие использовать. Слова приводят меня к сбою немного здесь, но (как мы говорим в Великобритании) эта платформа является 'Собаками'. Я настоятельно рекомендовал бы его для любых проектов зеленых полей, где Вы хотите быть в порядке быстро. Я получил все, в чем я нуждался от фантастический набор скринкастов Ninject Justin Etheredge. Я не вижу, что модифицирование Ninject в существующий код, являющийся проблемой вообще, но затем то же могло быть сказано относительно [1 119] StructureMap, по моему опыту. Это будет сложный выбор, продвигающийся между теми двумя, но у меня были бы конкуренция, чем застой и существует достойный объем здоровой конкуренции там.
Другие скринкасты МОК могут также быть найдены здесь на Dimecasts.
Вы ничего не получите немедленно, переключив существующий код на использование TransactionScope
. Вы должны использовать его для будущих разработок, поскольку он обеспечивает гибкость. В будущем будет проще включать в транзакцию вещи, отличные от вызовов ADO.NET.
Кстати, в вашем опубликованном примере экземпляры SqlCommand
должны находиться в с использованием
блоки.
Microsoft рекомендует использовать область транзакции:
http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.aspx
Основная идея заключается в том, что область транзакции будет управлять "внешним контекстом транзакции" за вас. Вы начинаете с разговора с одной базой данных, у вас есть транзакция sql, затем вы разговариваете с базой данных номер 2, и транзакция повышается до распределенной транзакции.
Объем транзакции действительно работает для вас, так что вы можете сосредоточиться на функциональности системы, а не водопровода.
РЕДАКТИРОВАТЬ
Когда вы используете область действия транзакции, транзакция охватывает все, что находится в этой области. Поэтому вы сохраняете строку кода, в которой подключаете команду к транзакции. Это возможный источник ошибки, например, если бы был один шанс из 1000, что эта строка была пропущена, сколько вы бы пропустили.
РЕДАКТИРОВАТЬ 2
Согласен с комментарием к Трийнко ниже. Однако мы используем Entity Framework, EF автоматически закроет и снова откроет соединение, чтобы подключить его к транзакции. Он не закрывает соединение физически, скорее, он выпускает его в пул соединений и получает новый, который может быть таким же или другим.
которые могут быть одинаковыми или разными. которые могут быть одинаковыми или разными.Просто обратите внимание, что при использовании Transaction Scope иногда возникают большие проблемы, потому что многие настройки, которые мы должны выполнить на сервере, такие как настройка DTC, брандмауэра и т. Д., Я рекомендовал использовать SqlTransaction для большей экономии в реализации.
Я предпочитаю TransactionScope. Это не отлично работают в любом сценарии, но в том, который вы описываете, это лучшее решение.
Мое рассуждение:
В совокупности результатом является немного меньше кода и, как правило, более надежная конструкция, поскольку система обрабатывает некоторые детали для меня; мне нужно помнить на одну вещь меньше.
Кроме того, прозрачная регистрация транзакций может быть особенно полезна, когда у вас есть несколько вложенных методов в вашем DAL - хотя вы должны позаботиться о том, чтобы случайно не получить вашу транзакцию превратиться в распределенную, требующую DTC, что может произойти, если вы используете несколько SqlConnections, даже если они указывают на одну и ту же БД.