Главная страница   /   14. Unity (Внедрение зависимостей в .NET

Меню:

  • Знакомство с Unity
  • Управление жизненным циклом
  • Работа с составными компонентами
  • Конфигурирование сложных API

В предыдущей главе мы рассматривали контейнер Autofac – один из недавно появившихся DI-контейнеров. Еще один современный DI-контейнер – это Unity. Его мы и рассмотрим в этой главе.

Autofac можно назвать DI-контейнером второго поколения, поскольку он зародился и развивался прямиком на .NET 3.5, и не был нагружен никакими чертами более ранних версий .NET. Несмотря на то, что Unity появился примерно в то же самое время, он унаследовал более консервативный подход. Unity 1.0 был выпущен в мае 2008 года, но создавался он под .NET 2.0, поскольку его разработчики осознавали, что большинству организаций потребуется некоторое время на то, чтобы перейти на версию .NET 3.5.

Unity – это модуль приложений, разработанный группой Patterns&Practices компании Microsoft. Но не обращайте внимание на это название: модуль приложений – это просто повторно используемая библиотека с соответствующей документацией и примерами.

Unity и Enterprise Library

Некоторые путают Unity и Enterprise Library (еще одно решение группы Patterns&Practices) или, по крайней мере, то, как они взаимосвязаны друг с другом. Давайте внесем некоторую ясность.

Unity – это самостоятельная библиотека. Ему не нужна Enterprise Library.

С другой стороны, в состав Enterprise Library входит Unity, хотя и выступает он в этом случае всего лишь в роли контейнера по умолчанию для Enterprise Library. При необходимости Unity в Enterprise Library может быть заменен другим DI-контейнером.

Согласно некоторому совершенно не научному интернет-исследованию, Unity является самым широко используемым DI-контейнером. Это довольно удивительно, но, скорее всего, связано с тем фактом, что разработала его компания Microsoft. Существующие конкуренты, к примеру, Castle Windsor или StructureMap, не были отмечены в этом исследовании, поэтому, вероятнее всего, Unity познакомил с понятием DI-контейнеров совершенно новый сегмент пользователей, которые ранее ничего о нем не знали.

В этой главе мы в такой же последовательности, как делали это и для других DI-контейнеров, рассмотрим контейнер Unity. Вы увидите, как можно использовать Unity для применения принципов и паттернов, приведенных ранее в частях 1-3. На рисунке 14-1 представлена структура главы.

Рисунок 14-1: Эта глава состоит из четырех разделов. Первый раздел знакомит нас с Unity и демонстрирует способы конфигурирования и разрешения компонентов. Следующие три раздела связаны с паттернами применения, которые требуют дополнительного внимания. Их можно прочитать по порядку или же пропустить некоторые из этих разделов и прочитать только те, которые вас интересуют.

Первый раздел знакомит нас с API контейнера Unity и должен рассматриваться в качестве предпосылки следующих трех разделов. Каждый из четырех разделов может быть прочитан независимо от остальных разделов, несмотря на то, что в четвертом разделе используются некоторые классы, которые вводятся в третьем разделе. Эти классы имеют относительно ясные имена, поэтому четвертый раздел можно прочитать, не читая перед этим третий. Но, с другой стороны, у вас случайно может появиться необходимость вернуться к этому разделу.

Подобно Castle Windsor контейнер Unity поддерживает несколько дополнительных возможностей, например, пользовательские жизненные циклы и механизм перехвата. В этой главе приводятся примеры и того, и другого явления, а также множество других более универсальных возможностей DI-контейнера. Все эти возможности суммированы, именно поэтому эта глава является одной из самых длинных глав этой книги.

Эта глава должна дать вам возможность приступить к работе, а также справиться с большинством общепринятых проблем, которые могут возникнуть при ежедневном использовании Unity. Это не окончательная трактовка Unity, а более подробную информацию о Unity можно получить онлайн. Возможно, из доступных на сегодняшний момент DI-контейнеров Unity лучше всего задокументирован.

Вы можете прочитать эту главу, не читая при этом остальные главы части 4, специально для того, чтобы познакомиться с Unity, или можете прочитать ее совместно с остальными главами части 4, чтобы сравнить DI-контейнеры. Цель данной главы – показать, как Unity связан с паттернами и принципами, описанными в остальной части книги, и как он их реализует.

14.1. Знакомство с Unity

14.2. Управление жизненным циклом

14.3. Работа с составными компонентами

14.4. Конфигурирование сложных API

14.5. Резюме