Особенности работы с контейнерами
Flexberry UnityFactory
является продуктом платформы Flexberry и позволяет стандартным образом работать с разрешением контейнеров Unity Container. Используется версия Unity 2.1.
Note: Flexberry UnityFactory доступно для установки в проект через NuGet-пакет Flexberry ORM.
Метод CreateContainer()
создает контейнер по умолчанию, через который можно выполнить разрешение интерфейса в реальную инстанцию:
IUnityContainer container = ICSSoft.Services.UnityFactory.CreateContainer();
IService serviceInstance = container.Resolve<IService>();
Note: Проблема при использовании этого метода в следующем: при создании экземпляра зависимости учитываются настройки времени жизни объекта. Эта настройка говорит о том, как контейнер должен создавать объект при запросе: каждый раз новый, создать единственный и переиспользовтаь и т.п. Однако, все эти настройки работают внутри конкретного экземпляра контейнера, а метод CreateContainer каждый раз создает новый контейнер. Это приводит к тому, что объекты типа singleton (ContainerControlledLifetimeManager) на самом деле такими не являются.
GetContainer
Метод GetContainer()
, возвращает единственный (на уровне домена приложения) экземпляр контейнера, что позволяет корректно работать с объектами типа ContainerControlledLifetimeManager
.
IUnityContainer container = ICSSoft.Services.UnityFactory.GetContainer();
IService serviceInstance = container.Resolve<IService>();
Note: При использовании UnityFactory рекомендуется использовать метод GetContainer().