[英]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.