我使用Autofac.Extras.DynamicProxy2来实现我的AOP政策 我将Autofac.Extras.DynamicProxy2更新为v3.0.6,我有一个例外:
组件Activator = LookupService(ReflectionActivator), Services = [WordBook.Protocols.Logic.ILookupService],Lifetime = Autofac.Core.Lifetime.CurrentScopeLifetime,Sharing = None,Ownership = OwnedByLifetimeScope不能使用接口拦截,因为它提供的服务不是公开可见的接口。检查你的 注册组件以确保您不启用 拦截并将其注册为内部/私有接口类型。
这是我的源代码:
ContainerBuilder builder = new ContainerBuilder();
builder.RegisterType<ExceptionInterceptor>();
builder.RegisterAssemblyTypes(Assembly.Load("WordBookLogics")).AsImplementedInterfaces().EnableInterfaceInterceptors();
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
适用于Autofac.Extras.DynamicProxy2 v3.0.5。
我更新后是否需要调整某些内容?
答案 0 :(得分:1)
我想我发现了这个问题。
在Autofac.Extras.DynamicProxy2 v3.0.5中,RegistrationExtensions.cs的第300行具有IsVisible条件。
但是,在Autofac.Extras.DynamicProxy2 v3.0.6中,IsVisible条件被替换为Assembly.IsInternalToDynamicProxy()。
我的公共接口的IsVisible属性为true,但我在公共接口上调用Assembly.IsInternalToDynamicProxy()的结果为false。
因此,我的公共界面是可见的,但它并不代表dynamicproxy的内部。
这就是我的拦截不起作用并在Autofac.Extras.DynamicProxy2 v3.0.6中得到例外的原因。
我只等待Autofac.Extras.DynamicProxy2的所有者修复它。