Autofac.Extras.DynamicProxy2 v3.0.6出现异常

时间:2015-07-02 01:45:03

标签: c# aop autofac

我使用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。

我更新后是否需要调整某些内容?

1 个答案:

答案 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的所有者修复它。