Фабрично конфигуриран с Spring връща нови инстанции за повиквания по време на изпълнение

Има ли лесен начин за използване на Spring IoC за фабрика, която връща нов екземпляр при всяко повикване по време на изпълнение (след конфигуриране и създаване на контекст)?

Бих предпочел да избегна силна зависимост от Spring и също така да избягвам да извиквам GetObject("myFacobj") всеки път... Вместо това търся нещо като инжектиране на указател на метод (както бих направил, когато програмирам в C вместо C#).

Може би е възможно да се инжектира делегат към фабрично повикване с помощта на 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 в пролетните документи. Благодаря ви за вашите съвети и насоки. - person Beachwalker; 26.01.2012