带有类型参数的 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")
};
我是不是忘记了什么?
拦截器围绕 services(As<T>
部分),而不是 components(具体的注册对象) .您正在将事物 注册为接口 但您没有启用 接口拦截 ,您正在启用 class拦截。没有任何 classes 可以拦截。
也将.AsSelf()
添加到该注册声明或切换回EnableInterfaceInterceptors()
。
我想使用 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")
};
我是不是忘记了什么?
拦截器围绕 services(As<T>
部分),而不是 components(具体的注册对象) .您正在将事物 注册为接口 但您没有启用 接口拦截 ,您正在启用 class拦截。没有任何 classes 可以拦截。
也将.AsSelf()
添加到该注册声明或切换回EnableInterfaceInterceptors()
。