使用 Castle.DynamicProxy 调用 2 个目标

发布于 2024-08-18 11:31:49 字数 85 浏览 8 评论 0原文

假设我有一个接口 IInterface。 假设我有同一个 IInterface 的 2 个实现(foo 和 bar)。 是否可以在两个目标上调用相同的方法?

Say I have an interface IInterface.
Say I have 2 implementations of the same IInterface (foo & bar).
Is it possible to invoke the same method on both targets?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

晒暮凉 2024-08-25 11:31:49

这取决于您如何处理它,

通常它是不可能的(应该返回哪个返回值?),但是没有什么可以阻止您将另一个目标包装在拦截器中并由拦截器调用它。

It depends how you approach it,

Generally its not possible (which return value should be returned?), but nothing stops you from having another target wrapped in an interceptor, and having it invoked by the interceptor.

窝囊感情。 2024-08-25 11:31:49

我想出了这个,但它使用反射,因此它不如对 Y 适配器类型代理的“本机”支持好...

public void Intercept(IInvocation invocation)
{
    invocation.Proceed();
    ThreadPool.QueueUserWorkItem(new WaitCallback(
        (object o) =>
            {
                invocation.Method.Invoke(newTarget, invocation.Arguments);
            }
            )
    );
}

使用 QueueUserWorkItem 保证调用该方法的线程不会在性能方面受到太大影响...
任何更好的解决方案都非常受欢迎!

I came up with this, but it uses reflection so it's not as good as "native" support for Y-adapter type of proxy...

public void Intercept(IInvocation invocation)
{
    invocation.Proceed();
    ThreadPool.QueueUserWorkItem(new WaitCallback(
        (object o) =>
            {
                invocation.Method.Invoke(newTarget, invocation.Arguments);
            }
            )
    );
}

Using the QueueUserWorkItem guarantees that the thread invoking the method is not going to suffer much in terms of performance...
Any better solution is more than welcome!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文