一次在多个类型上设置拦截器
本文关键字:类型 设置 一次 | 更新日期: 2023-09-27 18:08:58
我正在开发一个多年未更新的应用程序,我应该更新它的依赖项。温莎城堡需要从2.5.4升级到3.3.0升级后,不再编译以下代码:
container.Register(
Types.FromThisAssembly().Where(t => Attribute.IsDefined(t, typeof (ServiceBehaviorAttribute)))
.WithService.DefaultInterfaces()
.Configure(c => c.Interceptors(
InterceptorReference.ForType<ServiceInterceptor>(),
InterceptorReference.ForType<LoggingInterceptor>(),
InterceptorReference.ForType<ExceptionInterceptor>()).Anywhere.LifeStyle.Transient));
错误是:
Only assignment, call, increment, decrement, await expression, and new object expressions can be used as a statement.
ReSharper尝试通过分配一个变量来帮助解决这个问题:
container.Register(
Types.FromThisAssembly().Where(t => Attribute.IsDefined(t, typeof (ServiceBehaviorAttribute)))
.WithService.DefaultInterfaces()
.Configure(c =>
{
var componentRegistration = c.Interceptors(
InterceptorReference.ForType<ServiceInterceptor>(),
InterceptorReference.ForType<LoggingInterceptor>(),
InterceptorReference.ForType<ExceptionInterceptor>()).Anywhere.LifeStyle.Transient;
componentRegistration;
}));
会抛出相同的错误。
我已经到处寻找正确的方法来设置拦截器在几个类型一次像这样,但我发现的所有的例子要么是旧的,要么只是设置拦截器为一个单一的组件,如这一个从文档:
container.Register(
Component.For<ICalcService>()
.Interceptors(InterceptorReference.ForType<ReturnDefaultInterceptor>()).Last,
Component.For<ReturnDefaultInterceptor>()
);
这个不能工作,因为我不能单独注册每个组件
将LifeStyle.Transient
替换为LifestyleTransient()