Так что я некоторое время работал над созданием решения, которое создает определенные компоненты, используя ничего, кроме Castle DynamicProxy (версия 2.2) и перехватчик. Все выглядит великолепно, за исключением того, что в конце всего этого я понял, что мне нужно зарегистрировать эти компоненты с контейнером Windsor. Возможно ли это, или моя работа была напрасной?Регистрация компонентов с замком, которые динамически создаются DynamicProxy
Я соберу 2 конфигурации замка, чтобы объяснить свою проблему. Первый работает, а второй - нет.
Первый конфиг (это работает большой на некоторое время):
<castle>
<facilities>
<facility
id="factory.support"
type="Castle.Facilities.FactorySupport.FactorySupportFacility, Castle.MicroKernel" />
</facilities>
<components>
<component
id="Factory"
service="Foo.IFactory, Foo"
type="Foo.Local.LocalFactory, Foo.Local" />
<component
id="Loader"
service="Foo.Contracts.ILoader, Foo.Contracts"
type="Foo.Local.Loader, Foo.Local"
factoryId="Factory" factoryCreate="GetLoader" />
</components>
</castle>
Второй конфигурации (я не знаю, что поставить в атрибуте типа и он не работает без него):
<castle>
<facilities>
<facility
id="factory.support"
type="Castle.Facilities.FactorySupport.FactorySupportFacility, Castle.MicroKernel" />
</facilities>
<components>
<component
id="Factory"
service="Foo.IFactory, Foo"
type="Foo.Remote.RemoteFactory, Foo.Remote" />
<component
id="Loader"
service="Foo.Contracts.ILoader, Foo.Contracts"
type="I DUNNO, WHAT'S THE TYPE?"
factoryId="Factory" factoryCreate="GetLoader" />
</components>
</castle>
Таким образом, мои сфабрикованные конфигурации регистрируют заводскую установку, затем я регистрирую завод, а затем регистрирую компонент «ILoader». «LocalFactory» создает фактический тип для компонента ILoader, тогда как «RemoteFactory» создает компонент ILoader с использованием динамического прокси, создавая прокси без целей. I.e., я использую метод ProxyGenerator.CreateInterfaceProxyWithoutTarget, поэтому нет базового класса.
Итак, есть ли какая-либо надежда на регистрацию компонентов по второй конфигурации?
EDIT: К сожалению, использование свободного API конфигурации в настоящий момент не является вариантом. Поэтому, чтобы сузить мой вопрос, можно ли достичь этого, используя конфигурацию XML?
Вы пробовали с помощью свободно (на основе кода) механизм регистрации для сфабрикованного сценария? Я хотел бы сделать это, используя расширение «UsingFactoryMethod» для вызова вашего кода, который создает реализатор DynamicProxy интерфейса ILoader. При наличии свободного API регистрации вам не нужно указывать конкретный тип при регистрации заводской службы. –