我使用了在不同客户上实现的相同第三方WCF服务的几个不同版本。我遇到了问题,因为差异我无法使用相同的代码: - 旧版本有时不包含方法的所有方法或参数 - 某些客户可能会有一些自定义属性。
示例:
我可以做这两个版本:
// configured with http://service.customer1111.com/Service1111.svc?wsdl
using(var s = new project.Service.Service1111Client()){
...
}
或
// configured with http://service.customer2222.com/Service2222.svc?wsdl
using(var s = new project.Service.Service2222Client()){
...
}
Member m = s.MemberGet(1, 1); // same for both
var name = m.Name; //same for both
var age = m.AgeOfPet; // only valid on customer1111 - dosen't exist on 2222
var bmi = s.ComputeBMI(m); // method on 1111
var bmi2 = s.ComputeBMI(m, 2); // method on 2222
现在,我必须在10.000行代码中找到10个不同的位置,并注释错误的版本,以便在更改服务时能够构建项目。
我想:
Decimal bmi;
if (ConfigurationManager.AppSettings["customerID"] == "1111")
{
// method on 1111 - ignore build error on others
bmi = s.ComputeBMI(m);
}
else
{
// method on others - ignore build error on 1111
bmi2 = s.ComputeBMI(m, 2);
}
但这显然不会构建。
我正在寻找一种在某些代码块中“忽略构建错误”的方法。
差异对我的代码影响很小,否则创建和解析抽象类是一项艰巨的任务。
有什么办法可以实现吗?
答案 0 :(得分:0)
您可以使用c#预处理器指令(https://msdn.microsoft.com/en-us/library/ed8yd1ha.aspx),如此
Decimal bmi;
#if
bmi = s.ComputeBMI(m);
#else
bmi = s2.ComputeBMI(m, 2);
#endif