以下是我的服务正常注册线路,到目前为止一切正常。我必须使用 EnableClassInterceptors,但由于此处提供的原因,我无法使用 EnableInterfaceInterceptors 无法使用 EnableInterfaceInterceptors
builder.RegisterType<Service>().As<IService>().PropertiesAutowired().SingleInstance().EnableClassInterceptors().InterceptedBy(typeof(MyInterceptor));
现在,由于某种原因,我们必须向 Service 添加一个构造函数参数,并且该构造函数参数类型在容器中注册为命名注册。所以现在,上述注册失败,因为它无法自行解析该参数。 我可以选择使用注册表达式,我可以手动解析所有构造函数参数并创建 Service 对象,但由于以下错误,它导致我无法使用 EnableClassInterceptors
错误 CS0311 类型“Autofac.Builder.SimpleActivatorData”不能用作泛型类型或方法“RegistrationExtensions.EnableClassInterceptors
我想知道从这里该走什么路。
从错误来看,应该是变量的问题。 Autofac.Builder.SimpleActivatorData 与 Autofac.Builder.ConcreteReflectionActivatorData 是不同的类型,具有不同的属性和行为。
试试这个代码:
c => new ConcreteReflectionActivatorData(c.Resolve<SimpleActivatorData>())
此代码的含义是创建 ConcreteReflectionActivatorData 类的新实例,并使用从 SimpleActivatorData 解析的数据对其进行初始化。