因此,我一直在努力构建一个解决方案,该解决方案只使用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组件,创建无目标的代理。即,我使用ProxyGenerator.CreateInterfaceProxyWithoutTarget方法,因此没有基础类。
那么,根据第二个配置注册组件有没有希望?
编辑: 不幸的是,使用流利的配置API目前不是一种选择。所以为了缩小我的问题,是否可以使用XML配置来实现这一点?
您是否尝试过用流利的(基于代码)注册机制为您制作的场景?我会给出一个答案,使用“UsingFactoryMethod”扩展来调用创建ILoader接口的DynamicProxy实现者的代码。使用流畅的注册API,您无需在注册工厂构建的服务时指定具体类型。 – 2010-10-28 16:19:50