SimpleServiceLocator: Почему автоматическая инъекция конструктора не поддерживается для синглетонов?

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

Почему SimpleServiceLocator спроектирован таким образом?

Разве синглеты не должны быть похожи на обычные экземпляры, за исключением того, что на первый запрос на экземпляр, этот экземпляр сохраняется и используется повторно вместо того, чтобы каждый раз создавался новый? Почему SimpleServiceLocator требует, чтобы экземпляр предоставлялся во время процесса регистрации, а не просто позволял создавать и сохранять экземпляр по первому запросу?

Я понял, что смысл SimpleServiceLocator состоит в том, чтобы не иметь много наворотов и действительно легко для начинающих в использовании, но кажется, что он просто разработан неправильно, и что метод регистрации синглтона должен быть идентичен методу регистрации обычного экземпляра, за исключением того, что имя метода должно быть RegisterSingle () вместо Register () . Есть ли причина для более сложного (и, казалось бы, менее удобного) дизайна, который я просто не получаю?

Между тем, есть ли другой (предпочтительно бесплатный) контейнер IOC, который я могу использовать, который позволяет мне регистрировать объекты в коде аналогично SimpleServiceLocator но разрешает ли автоматическую инжекцию конструктора для синглетонов (или, по крайней мере, позволяет автоматическую инжекцию конструктора для зависимостей синглтона)?

1
задан Steven 9 April 2012 в 18:17
поделиться