繁体   English   中英

动态将调用重定向到其他程序集?

[英]Dynamically redirect calls to different assembly?

我被要求做一些不寻常的工作。 我们有一些客户端正在使用对我们的DLL进行调用的应用程序(我们称其为Sdk.dll)。

最近,有人决定更改Sdk代码中的某些名称空间。 如果我们要向客户提供此新的DLL,则它们的应用程序将损坏。

但是,某些客户端将使用DLL的新版本(简称为Sdk.Updated.dll)编写应用程序。

我的任务是以某种方式支持新旧客户端应用程序,而无需重新编译客户端应用程序。

我以为我可以简单地用新的替换旧的Sdk.dll,从而将所有调用重定向到Sdk.Updated.dll中的相应被调用者。 但是,为每个更改了名称空间的实例编写包装器类似乎很繁琐。

我想知道是否有人建议采用一种更动态的方式来完成此任务?

因此,请明确说明:

客户1:

using Sdk;

// ...

int sum = new Calc().AddTwoNumbers(3, 4);

客户2:

using Sdk.Updated;

// ...

int sum = new Calc().AddTwoNumbers(3, 4);

Sdk.Updated.dll:

namespace Sdk.Updated {
    public class Calc {
        public AddTwoNumbers(int x, int y) {
            return x + y;
        }
    }
}

在无法重新编译客户端应用程序的限制下,同时支持两个客户端应用程序的最佳方法是什么?

(增加的麻烦是,某些方法名称可能已在Sdk和Sdk.Updated之间更改,但我宁愿先了解一下如何处理名称空间的内容...)

经过一些调查(包括使用名称空间别名,以及构建使用反射来动态生成包装DLL的工具),我们得出的结论是,没有重新编译客户端应用程序就没有很好的方法。

实际上,在不首先考虑对客户端应用程序的潜在影响之前,不应更改名称空间。 (我相信这对于任何阅读本文的人来说都是显而易见的。)

如果您被要求做类似的事情,希望这可以节省很多时间(和金钱)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM