autofac - 无法将 EnableClassInterceptors 与表达式注册或 lambda 注册技术一起使用

问题描述 投票:0回答:1

以下是我的服务正常注册线路,到目前为止一切正常。我必须使用 EnableClassInterceptors,但由于此处提供的原因,我无法使用 EnableInterfaceInterceptors 无法使用 EnableInterfaceInterceptors

  builder.RegisterType<Service>().As<IService>().PropertiesAutowired().SingleInstance().EnableClassInterceptors().InterceptedBy(typeof(MyInterceptor));

现在,由于某种原因,我们必须向 Service 添加一个构造函数参数,并且该构造函数参数类型在容器中注册为命名注册。所以现在,上述注册失败,因为它无法自行解析该参数。 我可以选择使用注册表达式,我可以手动解析所有构造函数参数并创建 Service 对象,但由于以下错误,它导致我无法使用 EnableClassInterceptors

错误 CS0311 类型“Autofac.Builder.SimpleActivatorData”不能用作泛型类型或方法“RegistrationExtensions.EnableClassInterceptors(IRegistrationBuilder)”中的类型参数“TConcreteReflectionActivatorData”。没有从“Autofac.Builder.SimpleActivatorData”到“Autofac.Builder.ConcreteReflectionActivatorData”的隐式引用转换。

我想知道从这里该走什么路。

c# .net wcf autofac
1个回答
0
投票

从错误来看,应该是变量的问题。 Autofac.Builder.SimpleActivatorDataAutofac.Builder.ConcreteReflectionActivatorData 是不同的类型,具有不同的属性和行为。

试试这个代码:

c => new ConcreteReflectionActivatorData(c.Resolve<SimpleActivatorData>())

此代码的含义是创建 ConcreteReflectionActivatorData 类的新实例,并使用从 SimpleActivatorData 解析的数据对其进行初始化。

© www.soinside.com 2019 - 2024. All rights reserved.