На заводе настроено, что Spring возвращает новые экземпляры для вызовов во время выполнения.

Есть ли простой способ использовать Spring IoC для фабрики, которая возвращает новый экземпляр при каждом вызове во время выполнения (после настройки и создания контекста)?

Я бы предпочел избегать сильной зависимости от Spring, а также избегать вызова GetObject("myFacobj") каждый раз... Вместо этого я ищу что-то вроде инъекции указателя метода (как я делал бы при программировании на С вместо С#).

Может быть, можно ввести делегата в фабричный вызов с помощью Spring?

Некоторое вдохновение может быть получено из сообщения Как внедрить Predicate и Func в Spring .net о внедрении делегатов (Func‹>, ...), но я бы предпочел «Spring-Built-In-Solution», если это возможно.


person Beachwalker    schedule 11.01.2012    source источник
comment
Было бы неплохо, если бы Spring поддерживал внедрение фабрик Func‹TService›, как это делает Windsor, но я не смог найти никакого решения, как добавить поддержку такого поведения в Spring в целом.   -  person Buthrakaur    schedule 14.05.2012


Ответы (1)


Spring.NET поддерживает внедрение методов , что могло бы подойти здесь.

Я разместил пример в этом другом моем ответе о том, как вы можете использовать метод инъекции в качестве альтернативы использованию context.GetObject(...), так что вам не нужно брать зависимость от контейнера di.

person Marijn    schedule 11.01.2012
comment
Спасибо за подсказку метода инъекции. Но проблема заключается в параметризации во время выполнения, например. если вы хотите установить имя объекта (которое задается конструктором). Как бы вы решили это? - person Beachwalker; 12.01.2012
comment
Я не уверен, что понимаю вопрос в вашем комментарии. Разве метод, который вы вводите, не должен учитывать это? В вашем случае вы должны зарегистрировать фабрику с вашим контейнером. Эта фабрика будет иметь (абстрактный или виртуальный) метод GetNewObjectEveryTime(). Затем вы должны настроить внедрение метода, чтобы обеспечить реализацию этого метода. Эта реализация может использовать изменяющиеся во время выполнения параметры для настройки новых объектов. - person Marijn; 12.01.2012
comment
Если вы реализуете класс, который предоставляет метод, который вы хотите внедрить, в отдельной сборке, вы даже можете позволить этому классу зависеть от контейнера spring.net, при этом другой бизнес-код не будет зависеть от этой зависимости. - person Marijn; 12.01.2012
comment
Обратите внимание, что вы также можете указать фабричный метод создания объектов, но я предположил, что он вам не подходит. - person Marijn; 12.01.2012
comment
Я пробовал пример Fiona.Apple в документах Spring. Спасибо за ваши советы и рекомендации. - person Beachwalker; 26.01.2012