Краткий вопрос:
Есть ли в Castle Windsor что-то похожее на «инъекцию метода поиска» в Spring.Net, которую можно настроить из XML, что дает возможность извлекать временные экземпляры из контейнера без уведомления класса о контейнере IoC?
Длинный вопрос:
Я долгое время пользуюсь Spring / Spring.Net, и я экспериментировал с Castle Windsor, пытаясь перенести на него проект. Spring.Net имеет концепцию «инъекции метода поиска», которая (из документов Spring) ...
Внедрение метода поиска - это способность контейнера переопределять методы в управляемых объектах контейнера, чтобы возвращать результат поиска другого именованного объекта в контейнере. Поиск обычно включает объект-прототип, как в сценарии, описанном в предыдущем разделе. Среда Spring реализует внедрение этого метода путем динамического создания подкласса, переопределяющего метод с использованием классов в пространстве имен System.Reflection.Emit.
Что это значит, если бы у меня было следующее ...
public class SomeTransient
{
// ... I have dependencies that need to be filled by IoC container
}
public class SomeClass
{
public virtual void Work()
{
var o = CreateTransient();
}
public virtual SomeTransient CreateTransient() { }
}
Я могу поручить Spring переопределить метод CreateTransient и заставить этот метод возвращать новый созданный контейнером временный экземпляр (с инициализированными его зависимостями) при каждом вызове метода.
Уникальной частью этого является то, что он не требует прямых ссылок на Spring Framework (например, SomeClass не должен реализовывать определенный интерфейс).
Есть ли что-то похожее в замке Виндзор, чтобы сделать это через XML?
(в конце концов я отойду от конфигурации XML, но сейчас я просто пытаюсь запустить его)