【发布时间】:2017-09-25 17:10:22
【问题描述】:
我并不是在寻求一个具体的实现,而是试图找出我正在尝试做的事情的适当术语,以便我可以正确地研究这个主题。
我有一堆接口,这些接口由控制器、存储库、服务等实现。在应用程序启动过程的某个地方,我们使用Castle.MicroKernel.Registration.Component 类来注册用于特定接口的类。例如:
Component.For<IPaginationService>().ImplementedBy<PaginationService>().LifeStyle.Transient
最近我开始对创建每个类和方法调用的审计跟踪感兴趣。这些类有几百个,因此为每个类手动编写代理类并不是很实用。我可以使用模板来生成代码,但我不想用这些来破坏我们的代码库。
所以我很好奇是否有某种即时解决方案。我知道 nHibernate 在某些时候会创建覆盖所有实体类的代理类。有人可以指导我如何在这里做类似的事情吗?
类似:
Component.For<IPaginationService>().ImplementedBy<ProxyFor<PaginationService>>().LifeStyle.Transient
显然这行不通,因为我只能使用泛型来概括方法的类型,而不能概括方法本身。我可以使用一些棘手的反射方法来做到这一点吗?
【问题讨论】:
-
不确定你想做什么,我知道你知道,但是你可以在运行时使用反射来创建代理。 NHibernate 和 EF 做到了,它使延迟加载和其他功能成为可能。见this post。对于审计,我喜欢使用 NHibernate 的 Listeners,这是一个非常有用的功能 :)
-
你考虑过动态拦截吗? app-code.net/wordpress/?p=689
-
@DavidOsborne - 这两个似乎都是我(含糊)问题的好答案。如果您添加它们,我很乐意为您的时间投票。
-
@FelipeOriani - 这两个似乎都是我(含糊)问题的好答案。如果您添加它们,我很乐意为您的时间投票。
标签: nhibernate dependency-injection castle-windsor proxy-classes