我並不是在尋求一個具體的實現,而是試圖找出我正在嘗試做的事情的恰當術語,所以我可以正確地研究這個話題。執行.Net DI編譯時間代理?
我有一堆接口,這些接口由控制器,存儲庫,服務和whatnot實現。在應用程序的啓動過程中,我們使用Castle.MicroKernel.Registration.Component
類來註冊要用於特定接口的類。例如:
Component.For<IPaginationService>().ImplementedBy<PaginationService>().LifeStyle.Transient
最近我開始對創建每個類和方法調用的審計跟蹤感興趣。有幾百個這樣的類,所以用手寫代理類是不實際的。我可以使用模板來生成代碼,但我寧願不用我們的代碼庫來炸掉它。
所以我很好奇,如果有某種即時解決方案。我知道nHibernate在覆蓋所有實體類的某個點上創建代理類。有人可以給我一些指導,告訴我如何能夠在這裏做類似的事情嗎?
喜歡的東西:
Component.For<IPaginationService>().ImplementedBy<ProxyFor<PaginationService>>().LifeStyle.Transient
顯然是行不通的,因爲我只能用仿製藥來概括類型的方法,但不是方法本身。是否有一些棘手的反思方法可以用來做到這一點?
你的意思是像[面向方面編程:面向方面的編程與RealProxy類](https://msdn.microsoft.com/en-us/magazine/dn574804.aspx)? – NightOwl888
不知道你想做什麼,我知道你知道,但是你可以在運行時使用反射來創建代理。 NHibernate和EF做它,它使延遲加載和其他功能成爲可能。請參閱[本文](https://stackoverflow.com/a/4802281/316799)。對於審計我喜歡使用NHibernate的監聽器,它是一個非常有用的功能:) –
你有沒有考慮過動態攔截? http://app-code.net/wordpress/?p=689 –