0

Недавно я начал новую позицию и унаследовал немного кода, который я пытаюсь выяснить, как он работает даже для реорганизации приложения. Раньше я использовал Unity, но не очень хорошо разбираюсь во всем, что он делает и как он это делает. Я смотрел большое количество учебников, и ни один из них не касался кода, который выглядит так. Может ли кто-нибудь объяснить, что делает следующее?Методы регистрации Chained Unity

unityContainer.RegisterInstance(
        "IntegrationEntityContent", 
        ConfigurationManager.ConnectionStrings["IntegrationEntities"].ConnectionString, 
        new ContainerControlledLifetimeManager())     
       .RegisterType<IIntegrationEntities, IntegrationEntities>(
        new HierarchicalLifetimeManager(), 
        new InjectionConstructor()); 

Я знаю, что RegisterInstance раздает одноэлементный экземпляр объекта, но похоже, что только раздавать один экземпляр строки подключения. Я не могу понять, как тип IntegrationEntities получает строку соединения из вышеуказанного кода, и если приложение получает новый экземпляр IntegrationEntities каждый раз, когда он запрашивает его.

ответ

1
unityContainer.RegisterInstance(
        "IntegrationEntityContent", 
        ConfigurationManager.ConnectionStrings["IntegrationEntities"].ConnectionString, 
        new ContainerControlledLifetimeManager()) 

Этот код делает именованный регистрацию строки соединения с ContainerControlledLifetimeManager, который регистрирует существующий объект как одноплодной инстанции.

unityContainer.RegisterType<IIntegrationEntities, IntegrationEntities>(
        new HierarchicalLifetimeManager(), 
        new InjectionConstructor()); 

Следующий оператор регистрирует IntegrationEntities класса с иерархическим пожизненным менеджером. Он похож на singleton lifetime manager, но будет возвращать разные экземпляры для дочерних контейнеров (если они есть).

как тип IntegrationEntities получает строку подключения из приведенный выше код

Вы можете решить конкретную регистрацию по его имени. Это также верно для класса строк. Я полагаю, что конструктор IntegrationEntities имеет атрибут Unity с «IntegrationEntityContent» и позволяет контейнеру Unity вводить правильную строку соединения в Resolve.

если приложение получает новую IntegrationEntities экземпляра каждый раз, когда он просит одного

При такой конфигурации Unity будет возвращать тот же экземпляр на каждый контейнер. Если у контейнера есть дочерние контейнеры, то они будут иметь собственные экземпляры IntegrationEntities.

Смежные вопросы