一次在多种类型上设置拦截器
Set interceptors on several types at once
我正在开发一个多年未更新的应用程序,我应该更新它的依赖项。温莎城堡需要从 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;
}));
然而,这会引发相同的错误。
我一直在寻找像这样同时在多种类型上设置拦截器的正确方法,但我发现的所有示例要么是旧的,要么只是为单个组件设置拦截器,例如文档中的 this one:
container.Register(
Component.For<ICalcService>()
.Interceptors(InterceptorReference.ForType<ReturnDefaultInterceptor>()).Last,
Component.For<ReturnDefaultInterceptor>()
);
这不起作用,因为我无法单独注册每个组件。
将LifeStyle.Transient
替换为LifestyleTransient()
我正在开发一个多年未更新的应用程序,我应该更新它的依赖项。温莎城堡需要从 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;
}));
然而,这会引发相同的错误。
我一直在寻找像这样同时在多种类型上设置拦截器的正确方法,但我发现的所有示例要么是旧的,要么只是为单个组件设置拦截器,例如文档中的 this one:
container.Register(
Component.For<ICalcService>()
.Interceptors(InterceptorReference.ForType<ReturnDefaultInterceptor>()).Last,
Component.For<ReturnDefaultInterceptor>()
);
这不起作用,因为我无法单独注册每个组件。
将LifeStyle.Transient
替换为LifestyleTransient()