【问题标题】:Set interceptors on several types at once一次在几种类型上设置拦截器
【发布时间】:2015-08-20 11:15:57
【问题描述】:

我正在开发一个多年未更新的应用程序,我应该更新它的依赖项。温莎城堡需要从 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>()
);

这不起作用,因为我无法单独注册每个组件。

【问题讨论】:

    标签: c# .net castle-windsor interceptor


    【解决方案1】:

    LifeStyle.Transient 替换为LifestyleTransient()

    【讨论】:

    • 这是否记录在任何地方?还是应该很明显?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-14
    • 1970-01-01
    • 2021-03-25
    • 1970-01-01
    • 2011-08-04
    相关资源
    最近更新 更多