Показаны сообщения с ярлыком IoC. Показать все сообщения
Показаны сообщения с ярлыком IoC. Показать все сообщения

четверг, 2 сентября 2010 г.

Вышел Castle.Windsor (включая Core, DynamicProxy, DictionaryAdapter) версии 2.5

Ура товарищи.

Вышел стабильный релиз Castle.Windsor, который я со спокойной совестью теперь могу рекомендовать даже начинающим ЙОК-овцам (IoC, Inversion of Control).


В анонсе бета релиза была масса отличных новостей:
- объединили Castle.Core, Caste.DynamicProxy, Castle.DictionaryAdapter в Castle.Core
- объединили Castle.MicroKernel, Castle.Windsor в Castle.Windsor
- сделали ряд незначительных breaking changes (читал описание, там все очень экзотическое и редко используемое). Можно было бы более крепко пройтись по старому API
- весь устаревший API отметили как obsolete. До этого там была настоящая каша. Прямо как в Rhino.Mocks

Castle объединяет сборки, а (Microsoft) Unity декомпозирует. ...ребята которые пидалят Unity не ведают что творят :)


К счастью основная проблема с высоким порогом вхождения была решена - благодаря тому что методы были отмечены как obsolete, новички не будут выносить себе мозг в поисках того какие именно методы стоит использовать, а какие не стоит. Более того, разработчики обещают вообще удалить все obsolete методы в релизе 3.0.

До релиза 2.5, когда у меня спрашивали что лучше использовать в качестве IoC контейнера, я постоянно колебался в ответе. Обычно рекомендовал смотреть либо на Castle.Windsor либо на Autofac и говорил что если будут малейшие сложности с Castle.Windsor, то не морочить с ним долго голову.

Теперь же однозначно уверен что логичнее использовать Caslte.Windsor, а легкий Autofac стоит использовать только лишь в Silverlight проектах.


Пользуясь случаем приглашаю всех пользователей Caslte.Windsor "приложиться" к его улучшению, оставив свои предложения на фидбек сайте. Команда разработчиков реально прислушивается к пожеланиям их пользователей:

Provide more compact, discoverable fluent API


В качестве примера тут хорошо расписаны шаги миграции проекта S#arp Architecture на последнюю версию Castle.

Указывается как разрешить проблему зависимости NHibernate и Castle.Windsor на Castle.DynamicProxy, которая переехала в Castle.Core.

Описывается рефакторинг со старого API на новый API Castle.Windsor. Много внимания уделяется IWindsorInstaller, который мне очень понравился.



ЗЫ Да, я знаю что релиз как-бы вышел с пол месяца назад, но у меня таймауты... Уж простите :)

суббота, 3 апреля 2010 г.

Inversion of Control and Dependency Injection. Ссылки

Inversion of Control and Dependency Injection: Working with Windsor Container
http://msdn.microsoft.com/en-us/library/aa973811.aspx

Ознакомительная статья, раскрывающая основные концепции Inversion of Control и Dependency Injection, которую написал Oren Eini aka Ayende Rahien. Носит предельно практических характер. Достаточно много хорошего материала, все изложение идет в ключе разработки некоего приложения (или сервиса) по обработке заказов. Крайне рекомендую эту статью к прочтению.


Inversion of Control and Dependency Injection with Castle Windsor Container. Four Parts.
Цикл статей об использовании Inversion of Control и Dependency Injection с помощью популярного фреймверка Castle.Windsor.
http://dotnetslackers.com/articles/designpatterns/InversionOfControlAndDependencyInjectionWithCastleWindsorContainerPart1.aspx

Первая статья является вводной. Вначале статьи приводится пример кода в котором нарушается принцип разделения ответственности (Separation of concerns) и который написан без оглядки на Unit-тестирование. Затем приводится реализация кода с использованием принципа обращения зависимостей (Inversion of Control), а точнее с помощью Constuctor [Dependency] Injection. Вторая версия удобна с точки зрения тестирования, но не удобна в реальном использовании, так как клиент будет знать сразу о нескольких реальных типах. И заключительной части показывается использование IoC/DI контейнера, точнее его базовой части в виде Castle.MicroKernel API, а затем и в расширенной - Castle.Windsor.


http://dotnetslackers.com/articles/designpatterns/InversionOfControlAndDependencyInjectionWithCastleWindsorContainerPart2.aspx

Во второй части рассматриваются инъекция опциональных зависимостей (Property Injection), приводится пример инъекции конкретной реализации (имеет смысл, когда на один и тот же интерфейс может быть несколько реализаций). В конце статьи приводятся примеры декларативного Xml конфигурирования основных коллекций - Array, IList, IDictionary.


http://dotnetslackers.com/articles/designpatterns/InversionOfControlAndDependencyInjectionWithCastleWindsorContainerPart3.aspx

В третьей части показывается пример вынесения части конфигурации в отдельные разделы Xml конфигурации Castle.Windsor и включение этих параметров при декларировании сервисов. По простым примерам видно, насколько просто и одновременно мощно можно конфигурировать сервисы Castle.Windsor с помощью конфигурационного файла. Если нужно задать значение параметра, который имеет сложный пользовательский тип, то это можно сделать с помощью TypeConverter'а. Приводится, не совсем полезный пример реализации декоратора и его регистрации. Возможно это сделано для того чтобы потом можно было привести пример с define и if/else прямо внутри конфигурационного файла.
Всех описанных возможностей конфигруации хватит за глаза любому, даже самому энтерпрайзному приложению :)


http://dotnetslackers.com/articles/designpatterns/InversionOfControlAndDependencyInjectionWithCastleWindsorContainerPart4.aspx

В четвертой части описывается крайне важный материал - управление жизненным циклом сервисов внутри Castle.Windsor контейнера.
Любому, кто собирается работать с Caslte.Windsor стоит обязательно разобраться в том, что такое Lifestyle, Lifecycle, Commision/Decomission и Release Policy. Чтобы не было неожиданно неприятных ситуаций как со мной и Web-приложением на production сервере :)
Информация по Facility довольно полезна, но не так критична.


Building the Policy Injection in 40 Minutes with Windsor
http://ayende.com/Blog/archive/2007/03/07/Building-the-Policy-Injection-in-40-Minutes-with-Windsor.aspx

Реализация Policy Injection в виде Facility для Castle.Windsor. Типичный пример аспект-ориентированного программирования. Не знаю кто придумал термин Policy Injection, и что конкретно он обозначает, но когда мне говорят реализация аспекта (AOP), то я сразу понимаю о чем идет речь.


Caching with Castle Windsor
http://consultingblogs.emc.com/owainwragg/archive/2008/10/31/caching-with-castle-windsor.aspx

Реализация Facility, которая обеспечивает кеширование данных используя аспект-ориентированный подход. Очевидно, что с помощью IoC и AOP-подхода можно достаточно удобно решать такие вещи как Security, Logging, Caching.


The joys of Castle.Services.Transaction
http://www.jroller.com/hammett/entry/the_joys_of_castle_services

Описывается использование AutomaticTransactionFacility. Просто апофеоз декларативной attribute-driven разработки. Выглядит настолько необычно что я даже не знаю, стоит ли пытаться повторить это дома :) В любом случае идея невероятно креативная.


Hidden jewels in the Castle stack: Transaction Services
http://blogs.taiga.nl/martijn/2008/12/03/hidden-jewels-in-the-castle-stack-transaction-services

Прошу меня простить, но эта ссылка уже реальный оффтопик основной темы. В посте развивается идея сервиса транзакций из проекта Castle, только теперь транзакционность пытаются прикрутить уже к файловой системе...


List of .NET Dependency Injection Containers (IOC)
http://www.hanselman.com/blog/ListOfNETDependencyInjectionContainersIOC.aspx

Достаточно обширная подборка IoC контейнеров на платформе .NET от Scott Hanselman'а.


BitterCoder's Wiki. Container Tutorials
http://wiki.bittercoder.com/Default.aspx?Page=ContainerTutorials&AspxAutoDetectCookieSupport=1

Коллекция ссылок на туториалы по Castle.Windsor, в настоящее время представлено четырнадцать частей. Специфика этих туториалов заключается в том, что там в каждой части раскрывается только одна функциональная возможность библиотеки. Возможно для кого-то такой дробный формат изложения покажется удобным.

Внизу страницы приведена целая коллекция ссылок по рассматриваемой тематике на различные сторонние ресурсы.


Inject Some Life into Your Applications—Getting to Know the Unity Application Block
http://msdn.microsoft.com/en-us/library/cc816062.aspx

Вводная статья по Unity, IoC контейнеру, который разрабатывался силами Microsoft и затем был выпущен с открытым исходным кодом. Рассматриваются основные аспекты IoC контейнера. Все примеры кода приведены сразу на двух языках - C# и VB.NET.


IoC libraries compared
http://elegantcode.com/2009/01/07/ioc-libraries-compared/

Сравнение API у различных IoC контейнеров: Ninject, StructureMap, Unity, Spring.net, Castle.Windsor, Autofac. Следует принять во внимание что статья написана в январе 2009 года, а API каждого из перечисленный фреймверков постоянно совершенствуется.


Две простейшие реализации IoC контейнеров. По их реализации можно сделать вывод о том, какая основная задача ставится перед таким контейнером.

It's My Turn To Build An IoC Container In 15 Minutes and 33 Lines
http://www.kenegozi.com/Blog/2008/01/17/its-my-turn-to-build-an-ioc-container-in-15-minutes-and-33-lines.aspx

Building an IoC container in 15 lines of code
http://ayende.com/Blog/archive/2007/10/20/Building-an-IoC-container-in-15-lines-of-code.aspx