因此,我一直在努力構建一個解決方案,該解決方案只使用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