【发布时间】:2018-08-07 04:10:51
【问题描述】:
我想使用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();
我得到错误
在“Castle.Proxies.MyServiceProxy”类型上使用“Autofac.Core.Activators.Reflection.DefaultConstructorFinder”找到的任何构造函数都不能使用可用的服务和参数调用: 无法解析构造函数“Void .ctor(Castle.DynamicProxy.IInterceptor[], System.String, System.String, NLog.ILogger)”的参数“System.String”。
我的参数列表在这两种情况下都是相等的,足以创建 MyService 看起来像
var parameters = new[]
{
new NamedParameter("name1", "value1"),
new NamedParameter("name2", "value2")
};
我忘记了什么吗?
【问题讨论】:
标签: c# dependency-injection autofac castle-dynamicproxy