带有类型参数的 Autofac DynamicProxy

Autofac DynamicProxy with type parameters

我想使用 Autofac 的类型拦截来缓存方法结果。

我用下面的代码注册了我的类型

builder.RegisterAssemblyTypes(dependentAssemblies)
            .Where(x => x.GetCustomAttributes(typeof(InterceptAttribute), true).Any())
            .WithParameters(parameters)
            .AsImplementedInterfaces()
            .EnableInterfaceInterceptors()
            .InstancePerRequest();

而且效果很好。 但这是接口拦截。 当我使用

注册类型时
builder.RegisterAssemblyTypes(dependentAssemblies)
            .Where(x => x.GetCustomAttributes(typeof(InterceptAttribute), true).Any())
            .WithParameters(parameters)
            .AsImplementedInterfaces()
            .EnableClassInterceptors()
            .InstancePerRequest();

我收到错误

None of the constructors found with 'Autofac.Core.Activators.Reflection.DefaultConstructorFinder' on type 'Castle.Proxies.MyServiceProxy' can be invoked with the available services and parameters: Cannot resolve parameter 'System.String ' of constructor 'Void .ctor(Castle.DynamicProxy.IInterceptor[], System.String, System.String, NLog.ILogger)'.

我的参数列表在两种情况下都相等,足以创建 MyService 看起来像

var parameters = new[]
        {
            new NamedParameter("name1", "value1"),
            new NamedParameter("name2", "value2")
        };

我是不是忘记了什么?

拦截器围绕 servicesAs<T> 部分),而不是 components(具体的注册对象) .您正在将事物 注册为接口 但您没有启用 接口拦截 ,您正在启用 class拦截。没有任何 classes 可以拦截。

.AsSelf()添加到该注册声明或切换回EnableInterfaceInterceptors()