【问题标题】:Castle Windsor IInterceptor Configuration (Nancy bug)Castle Windsor IInterceptor 配置(Nancy 错误)
【发布时间】:2013-06-12 17:06:54
【问题描述】:

所以我遇到了this issue 和 Nancy 的 Windsor 引导程序。我设法拼凑了一个小型测试项目,我可以在其中重现出了什么问题。你可以找到项目here

似乎出了问题的是:DynamicProxy 似乎只捕捉到void Handle(Action<string> oncomplete) 方法的调用,而不是在另一个线程上调用string Handle(string input) 方法。 好像Engine 在被发送到另一个线程后不再被代理。 暂且说:这只是对同一类上另一个方法的调用没有被代理。

这意味着程序的输出只有

Handled Handle with return type System.Void
test

而不是

Handled Handle with return type System.Void
Handled Handle with return type System.String
test

这是动态代理的预期行为吗?另一个线程上的代理不再是代理了?还是代码有问题?

编辑:只是 RTFM 的动态代理,看起来像 Works As Intended。现在如何配置我的 IEngine 实例以使用正确类型的代理?

【问题讨论】:

    标签: castle-windsor nancy castle-dynamicproxy


    【解决方案1】:

    尝试改变:

    Component.For<MyEngine>().Forward<IEngine>().Interceptors<ScopeInterceptor>());
    

    进入

    Component.For<MyEngine>().Forward<IEngine>().Forward<MyEngine>().Interceptors<ScopeInterceptor>());
    

    我没有时间实际尝试,但这应该会迫使 windsor 创建一个类代理,这应该可以解决您的问题

    亲切的问候, 马尔维恩。

    -- 编辑--

    对于当前链接尝试替换:

    Component.For<IEngine>().ImplementedBy<Engine>()
    

    与:

    Component.For<IEngine, Engine>().ImplementedBy<Engine>()
    

    【讨论】:

    • 抱歉,我的项目的链接没有在正确的版本上。您查看的修订版实际上包含工作代码,但我并不想像您查看的修订版那样子类化 Engine
    • Jep,刚刚编辑了它。问题是,如果我要继承 Engine,那么我就不再需要 DynamicProxy。所以我想尽可能避免这种情况
    • 这就是迫使 Windsor 使用类代理的原因。所以,接受了答案。可悲的是,类代理并不能解决我的根本问题......
    猜你喜欢
    • 2011-02-26
    • 1970-01-01
    • 2011-08-23
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    • 2012-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多