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

Внедрение зависимостей в .NET

Внедрение зависимостей в .NET

Марк Симан

13.5. Резюме

В этой главе вы опробовали в действии DI-контейнер Autofac. Несмотря на то, что Autofac – это контейнер второго поколения, он все равно достаточно комплексный и подходит для большинства каверзных ситуаций, с которыми мы сталкиваемся при использовании DI-контейнеров. Архитектура этого контейнера напрямую построена на особенностях .NET 3.5 и C# 3.0, но, хотя внутри Autofac использует делегаты и блоки кода, общее API просто в использовании.

Важным вопросом, касающимся Autofac, является недвусмысленность. Он не пытается предугадать, что мы имеем ввиду, а предлагает легкое в использовании API, которое предоставляет нам возможность явным образом разрешать различные возможности.

Одним из примеров такой недвусмысленности является то, что в отличие от других DI-контейнеров Autofac навязывает более строгую концепцию разделения между процессом конфигурирования и потребления контейнера. Компоненты мы конфигурируем с помощью экземпляра ContainerBuilder, но ContainerBuilder не умеет разрешать компоненты. После окончания процесса конфигурирования ContainerBuilder, мы используем его для создания IContainer, который можно использовать для разрешения компонентов.

Мы можем конфигурировать ContainerBuilder любым возможным способом: с помощью императивного кода, посредством XML или путем задания соглашений. А конфигурации мы можем пакетировать в модули.

То, как Autofac использует механизм управления жизненным циклом, несколько отличается от того, как его используют другие DI-контейнеры. Такие стандартные стили существования, как Transient и Singleton являются встроенными. Но другие контекстные стили существования, например, Web Request Context, необходимы для областей применения, в которых мы явным образом взаимодействуем с контейнером с целью определить контекст, в рамках которого разрешаются и высвобождаются компоненты. Это в полной мере касается стиля Web Request Context. С другой стороны, эта модель не позволяет нам реализовывать пользовательский стиль существования Pooled или кэшированный стиль существования. Таким образом, простого способа реализации пользовательских стилей существования с помощью Autofac нет. По мнению Николаса Блумхардта (создателя Autofac), такие ситуации никогда не встречались на дискуссионных форумах, поэтому, вероятнее всего, это не столь большая проблема. Чаще всего предлагаемого Autofac механизма управления жизненным циклом бывает более чем достаточно.

Autofac – современный DI-контейнер, который предлагает достаточно исчерпывающий набор возможностей. В следующей главе мы рассмотрим еще один DI-контейнер второго поколения – Unity.