В Unity, когда зависимости определяются через рефлексию? - PullRequest
1 голос
/ 04 февраля 2012

Помимо зарегистрированных зависимостей, являются ли зависимости, которые определяются с помощью отражения, например, внедренные зависимости, выполняемые в отношении времени жизни зависимости или в течение времени существования контейнера DI?

Редактировать: Контейнер DI вразум - это Unity.

Редактировать: Разработка: мне любопытно, сколько раз происходит процесс отражения, а также хотелось получить ясность относительно погоды или нет, на этапе построения Unity, в котором используется отражение, будут найдены конструкторы и свойства.Четвертый этап сборки Unity, в соответствии с MSDN ( Source ), - это «Precreation», то есть «Четвертый этап. Здесь выполняется отражение над конструкторами, свойствами и т. Д.».Сколько раз проходит этот этап?Один раз во время конструирования контейнера или каждый раз, когда нужно разрешать зависимости конструктора и свойств?В какой части шаблона Register Resolve Release это происходит?

1 Ответ

2 голосов
/ 04 февраля 2012

Unity использует конвейер сборки под названием StrategyChain для создания объектов. Этот конвейер запускается каждый раз, когда вы разрешаете объект из контейнера.

Каждый шаг в этом конвейере реализован как стратегия. Эти стратегии поиска значений называются BuilderPolicies. Эти политики инкапсулируют информацию, накопленную стратегией (например, используя отражение, чтобы определить, какой конструктор использовать, какие свойства вводить и т. Д.). При первом запуске конвейера для определенного типа стратегии помещают политики в хранилище с именем PolicyList. В следующий раз, когда конвейеру будет предложено создать этот тип, эти значения будут использованы повторно, поэтому затрачиваемые на это усилия будут стоить вам только один раз.


UPDATE

Полагаю, вы имеете в виду ASP.NET? На самом деле есть два PolicyLists. Тот, который живет только один цикл через StrategyChain (переходный процесс), и тот, который связан со сроком службы контейнера. Он живет до тех пор, пока ваш экземпляр UnityContainer не утилизируется или не собирается мусор. Одна вещь, которая может быть вам интересна: вы не можете сериализовать свой контейнер. Таким образом, вы не можете указать приложению, работающему в веб-ферме, хранить его в кэше и делить его между серверами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...