因此,我一直在努力构建一个解决方案,该解决方案只使用 Castle DynamicProxy(2.2 版)和拦截器来创建某些组件。一切看起来都很棒,除了在这一切结束时我意识到我需要将这些组件注册到 windsor 容器。这是可能的还是我的工作是徒劳的?
我将制作 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>
第二个配置(我不知道在 type 属性中放什么,没有它就无法工作):
<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 组件,创建没有目标的代理。即我使用的是ProxyGenerator.CreateInterfaceProxyWithoutTarget方法,所以没有底层类。
那么,根据第二个配置注册组件有什么希望吗?
编辑:不幸的是,目前不能选择使用流畅的配置 API。所以为了缩小我的问题,是否可以使用 XML 配置来实现这一点?