IoC Dependency Injection для объектов с состоянием (не глобальных) - PullRequest
6 голосов
/ 13 января 2011

Я новичок в этом бизнесе IoC и DI. Мне кажется, что я понимаю концепцию, если вы передаете объекты, имеющие глобальный охват, но я не понимаю, как это работает, когда вам нужно обойти объект, который имеет определенное логическое состояние. Так, например, если бы я хотел внедрить объект person в командный объект write file - как бы я мог выбрать правильный объект person динамически? Из того, что я видел, я мог бы создать объект по умолчанию, но мое отключение состоит в том, что вы не будете использовать объект человека по умолчанию, он должен быть динамическим. Я предполагаю, что контейнер IoC может просто поддерживать состояние объекта для вас, когда он будет передан, но тогда это предполагает, что вы имеете дело только с одним объектом-человеком, потому что не будет никакой безопасности потока, верно? Я знаю, что мне чего-то не хватает (может быть, что-то вроде фабричного класса), но мне нужно немного больше информации о том, как это будет работать.

Ответы [ 2 ]

6 голосов
/ 13 января 2011

Ну, вы всегда можете внедрить Abstract Factory в своего потребителя и использовать его для создания объектов локальной области действия.

Это иногда необходимо. Смотрите эти примеры:

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

4 голосов
/ 14 января 2011

Когда вы создаете сервисный объект (например, WriteFileService), вы вводите в него все, что ему нужно для выполнения своей работы. Возможно, ему нужен объект файловой системы или что-то в этом роде.

Объект Person в вашем примере должен быть передан объекту службы в качестве параметра для вызова метода. например writeFileService.write(person)

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