用于泛型的Autofac拦截配置

时间:2014-08-11 13:22:32

标签: logging autofac interception

我正在尝试使用Autofac进行某种拦截。目前我配置了一些bll对象:

updater.RegisterGeneric(typeof(BaseBll<>))
            .AsImplementedInterfaces()
            .InstancePerRequest()
            .PropertiesAutowired(PropertyWiringOptions.AllowCircularDependencies)
            .InterceptedBy(typeof(ActivityLogger));
updater.Register(c => new ActivityLogger());

我在其中一个类上放置了Interception属性:

[Intercept(typeof(ActivityLogger))]
public class MyClassBll : BaseBll<TModel>, IMyClassBll

不幸的是,从MyClassBll调用某些方法时不会调用Intercept方法。如果您有任何想法,如何修复,请告诉我。

现在我找到了临时解决方法:

updater.RegisterType<MyClassBll>().As<IMyClassBll>().EnableInterfaceInterceptors();

2 个答案:

答案 0 :(得分:0)

似乎Autofac有一个属性注入错误,将其更改为构造函数注入解决了问题。

答案 1 :(得分:0)

您忘记在.InterceptedBy()之前包含.EnableInterfaceInterceptors()或.EnableClassInterceptors()。在这里看看:https://autofaccn.readthedocs.io/en/latest/advanced/interceptors.html

[更新]

根据要求,我根据发布的代码提供了一个代码示例:

updater.RegisterGeneric(typeof(BaseBll<>))
  .AsImplementedInterfaces()
  .InstancePerRequest()
  .PropertiesAutowired(PropertyWiringOptions.AllowCircularDependencies)
  .EnableInterfaceInterceptors()
  .InterceptedBy(typeof(ActivityLogger));