我正在尝试使用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();
答案 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));