Детерминированная инициализация и внедрение зависимостей (на основе конструктора) - PullRequest
2 голосов
/ 19 июня 2010

У моего демонстрационного приложения, над которым я работаю, очень долгая процедура запуска.Приложение, которое я пытаюсь заменить новыми идеями, во время этого много записывает в консоль (представьте себе: «сейчас загружаются данные ... сетка сплайнов ... вход в сторонний сервис ...»).

Потратив целый день на изучение DI в основном с нуля, я создаю целый (!) Граф объектов теперь за один вызов контейнера.Спасибо всем здесь, между прочим, за то, что предоставили так много идей и удивительных ответов.Это сообщество рушится.

Но теперь я хочу снова сделать детерминированную инициализацию, чтобы я мог войти в свой рабочий процесс (я использую Workflow Foundation 4.0, потому что мне нравится декларативный стиль и фактчто я могу показать людям в графике, что происходит), когда я загружаю данные, структурирую сплайны и все такое.

Как вы думаете, было бы приемлемой практикой иметь класс StartupManager (единственный синглтон в моемархитектура, теперь я убил все остальные "экземпляры getter"!), которые будут вызывать вторичные методы инициализации для объектов, которые он внедрил (я использовал buildUp () и DI на основе свойств здесь)?

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

1 Ответ

0 голосов
/ 12 марта 2014

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

нет :) у вас не должно быть ничего статичного. Ваш алгоритм может выглядеть так:

  • создать экземпляр вашего DI Builder
  • передать этот экземпляр с определением зависимостей (из файла или программно)
  • вызовите сборку на этом настроенном сборщике. этот метод должен возвращать экземпляр контекста
  • в контексте вы вызываете give_me_object_x, и вы должны получить объект x, заполненный всеми зависимостями

или просто посмотрите, как построена пружина - это очень хороший пример хорошо написанного DI-фреймворка

...