разрешение графов зависимостей в Unity - PullRequest
1 голос
/ 03 февраля 2012

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

Ответы [ 2 ]

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

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

  1. Начать сборку с запрошенного типа
  2. Найдите самый длинный конструктор типа
  3. Перейти к (1.) для каждого типа параметра конструктора
  4. Создание экземпляра с использованием результирующих объектов
  5. Поиск всех открытых свойств, помеченных [DependencyAttribute]
  6. Перейти к (1.) для каждого типа свойства
  7. Установить значения свойств для результирующих объектов
  8. Вернуть созданный объект

Создание объекта можно рассматривать в несколько этапов. Эта ссылка MSDN прекрасно подводит итог различным этапам и тому, что выполняется по умолчанию на каждом этапе: UnityBuildStage

1 голос
/ 03 февраля 2012

Это просто проблема обхода графа. Это может быть первая глубина или первая ширина или кто знает что еще. Но это действительно так просто.

Для разрешения

T(X, Y)

Первое разрешение X и Y. Но если X равно

X(A, B)

и Y

Y(Z)

Разрешить A и B и Z тоже. Продолжайте, пока не достигнете листового узла.

...