Где я должен сохранить ссылку на свой контейнер DI?

Эрланг: хвостовая рекурсия

fac(0) -> 1;
fac(N) when N > 0 -> fac(N, 1).

fac(1, R) -> R;
fac(N, R) -> fac(N - 1, R * N).
9
задан Mike Comstock 17 November 2009 в 02:06
поделиться

2 ответа

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

Сказав, что , если ваша структура затрудняет вам доступ к экземпляру приложения, использование статической переменной не будет концом света.

5
ответ дан 4 December 2019 в 23:40
поделиться

Я согласен с мистером Стернаном в этом. Следует учитывать, что некоторые контейнеры DI реализуют IDisposable, поэтому вы, вероятно, захотите избавиться от контейнера при нормальном завершении программы. См. Как согласовать IDisposable и IoC?

Также обратите внимание, что часто лучше избегать распределения зависимостей от контейнера DI по всему приложению. Другими словами, старайтесь не делать контейнер глобально доступным (синглтон, статическое свойство или даже внедренный) для использования в качестве локатора служб .

Вместо этого вы можете использовать способность контейнера разрешать зависимости между зависимости. Например, вы можете создать контейнер при запуске приложения и использовать его для построения своей модели (в MVC). Модель может зависеть от репозитория и веб-службы. Репозиторий может зависеть от регистратора. Контейнер разрешит все эти проблемы при построении модели. Если ваша модель должна создавать экземпляры зависимостей на лету, внедрите в нее фабрику.

1
ответ дан 4 December 2019 в 23:40
поделиться