2013-05-08 125 views
1

我们的应用程序中的生命周期范围很小。能够截获在autofac中注册的所有服务会很有趣。通过这样做,我们可以确切地看到代码在每个生命周期范围内使用的路径以及使用哪个方法参数。不是真的可用于生产,但是对于调试/诊断/重构来说真的非常棒,因为您可以创建整个图片而不仅仅是单元级别。拦截所有服务

但是AFAIK只能为每个注册注册一个拦截器?

回答

0

使用Autofac.Extras.DynamicProxy2库开箱即可支持这样的事情。你可能实现类似的东西,使用类似于Autofac.Extras.DynamicProxy2的填充码的每个组件处理OnActivating一个模块,但你会遇到麻烦一样...

  • 你想通过这门课拦截器或接口拦截器?正在解决的服务类型与支持它的组件的限制类型将影响您想要创建的动态代理类型。我相信目前的A.E.D2代码只会为/或者不是每个类实现的接口生成拦截。
  • 您是否使用WCF客户端代理?客户代理是他们自己的一个有趣的野兽,所以你必须特别处理它们。你会在A.E.D2中看到。

一般像这样的问题,通过面向方面编程解决方案(例如,PostSharp)或分析器得到解决(例如,ANTS)...或两者的组合。如果您有能力,您可能需要查看这些解决方案。

有关我在谈论什么类型的模块实现的示例,check out the log4net integration page on the Autofac wiki。这显示了如何处理系统中每个组件的OnPreparing。你可以做同样的事情,但是应该使用OnActivating来代替use the sample on the Lifetime Events wiki page来向你展示如何将一个已解决的事情交换为另一个(交换生成的代理的真实对象)。