我使用Autofac DynamicProxy2做AOP日志记录。 如果我这样注册:
builder.RegisterAssemblyTypes(assemblys.ToArray()).Where(t => t.Name.EndsWith("ServiceImpl"))
.AsImplementedInterfaces()
.InstancePerLifetimeScope()
.PropertiesAutowired()
.EnableInterfaceInterceptors()
.InterceptedBy(typeof(LogInterceptor));
;
然后ValuesServiceImpl实例可以自动连接到属性,如下所示:
public class ValuesController : ApiController
{
public IValuesService ValuesService { get; set; }
}
但如果我使用PropertiesAutowired( PropertyWiringOptions.AllowCircularDependencies )
builder.RegisterAssemblyTypes(assemblys.ToArray()).Where(t => t.Name.EndsWith("ServiceImpl"))
.AsImplementedInterfaces()
.InstancePerLifetimeScope()
.PropertiesAutowired(PropertyWiringOptions.AllowCircularDependencies)
.EnableInterfaceInterceptors()
.InterceptedBy(typeof(LogInterceptor));
;
然后PropertiesAutowired无效,ValuesService属性为null。
在我的项目中,我必须允许循环依赖,我更喜欢使用EnableInterfaceInterceptors而不是EnableClassInterceptors