0

我是新來的人,希望我的第一個問題不會混淆任何人。[Castle.DynamicProxy]創建的代理對象沒有正確設置原始對象的屬性

我將Castle Windsor和Castle DynamicProxy一起使用,以便將AOP與IOC集成在一起,以便我可以實施日誌記錄服務(以及審計等),並攔截項目中的所有服務。

我試圖代理已解決的實例來完成這件事,但沒有運氣。因爲返回的代理將已解析實例的屬性設置爲空。以下是參考的調試信息(PROBLEMATIC屬性是TimeService)。

the resolved instance before proxied

的解決實例之前代理。

the proxied object

代理對象

我錯過了什麼或者我才明白城堡DynamicProxy以錯誤的方式?我確實在尋找任何解決方案,但沒有運氣。

任何答案是高度讚賞。提前致謝。

回答

1

你應該使用溫莎的內置登記,不重寫WindsorContainer.Resolve否則你還會碰到其他問題圍繞釋放組件和容器壽命期間AOP支持:

container.Register(
    Component.For<ICalcService>() 
     .Interceptors(InterceptorReference.ForType<ReturnDefaultInterceptor>()).Last, 
    Component.For<ReturnDefaultInterceptor>() 
); 

詳情參見文檔: https://github.com/castleproject/Windsor/blob/master/docs/registering-interceptors-and-proxyoptions.md

+0

非常感謝您的回答,這個工程的me.One更多的問題,似乎這種解決方案需要爲每個組件攔截器配置(無論是在代碼或配置文件),在那裏,你可以指定某種全球性的方式攔截器自動適用於所有的th e組件? –

+0

@SkyFeng如果您沒有使用約定驅動註冊(例如Classes.FromAssemblyContaining()),則使用hook容器。 ComponentRegistered並添加到ComponentModel.Interceptors。 –

+0

明白了。非常感謝。 @ jonathon-rossi –

相關問題