Nhibernate 实现.NETDI编译时代理?

Nhibernate 实现.NETDI编译时代理?,nhibernate,dependency-injection,castle-windsor,proxy-classes,Nhibernate,Dependency Injection,Castle Windsor,Proxy Classes,我并不是在寻找一个具体的实现,而是在试图找出我要做的事情的合适术语,这样我才能正确地研究这个主题 我有很多接口,这些接口由控制器、存储库、服务等等实现。在应用程序的启动过程中,我们使用Castle.MicroKernel.Registration.Component类来注册用于特定接口的类。例如: Component.For<IPaginationService>().ImplementedBy<PaginationService>().LifeStyle.Transie

我并不是在寻找一个具体的实现,而是在试图找出我要做的事情的合适术语,这样我才能正确地研究这个主题

我有很多接口,这些接口由控制器、存储库、服务等等实现。在应用程序的启动过程中,我们使用
Castle.MicroKernel.Registration.Component
类来注册用于特定接口的类。例如:

Component.For<IPaginationService>().ImplementedBy<PaginationService>().LifeStyle.Transient
Component.For().ImplementedBy().lifesture.Transient
最近,我开始对创建每个类和方法调用的审计跟踪感兴趣。有几百个这样的类,所以手工为每个类编写一个代理类不是很实用。我可以使用一个模板来生成代码,但我不想用这些来破坏我们的代码库

所以我很好奇是否有某种即时解决方案。我知道nHibernate会在某个点创建代理类,覆盖所有实体类。有人能给我一些指导,告诉我怎样才能在这里做类似的事情吗

比如:

Component.For<IPaginationService>().ImplementedBy<ProxyFor<PaginationService>>().LifeStyle.Transient
Component.For().ImplementedBy().lifesture.Transient

显然,这是行不通的,因为我只能使用泛型来泛化方法的类型,而不能泛化方法本身。是否有一些棘手的反射方法可以用来实现这一点?

您正在寻找Castle Windsor所称的拦截器。这是一种解决问题的方法——审计当然是其中之一,或:

面向方面编程是一种在现有操作之前或之后有效地“注入”代码片段的方法。这是通过定义一个Inteceptor来实现的,该Inteceptor包装被调用的逻辑,然后在调用特定的方法集/子集时注册它以运行

如果您想将其应用于许多已注册的服务,请阅读更多关于:帮助


使用,这样的事情甚至可以在编译时完成。这可以加快生成的应用程序的速度,但如果使用正确,。

您的意思是像这样吗?我知道,您不确定要做什么,但您可以在运行时使用反射创建代理。NHibernate和EF做到了这一点,它使延迟加载和其他特性成为可能。看见对于审计,我喜欢使用NHibernate的监听器,这是一个非常有用的特性:)您考虑过动态拦截吗@戴维多斯伯恩-这两个似乎都是我(模糊)问题的好答案。如果你把它们加在一起,我很乐意给你一次投票权。@FelipeOriani-这两个似乎都是对我(模糊的)问题的好答案。如果你把它们加在一起,我很乐意给你时间投票。谢谢!这就是我一直在寻找的信息。这些术语和文章将帮助我进一步研究。