在c#.Net Framework 4.5(Visual Studio Ultimate 2012,版本11.0.61219.00更新5)中,我试图在运行时定义要使用的Web服务的服务变量。每个Web服务(有很多)都被定义为相同的(端点URL除外),但是凭据不会越过以进行身份验证。以下条件很容易简化当前问题。以下代码给出了错误:无法将类型WebService2.Service
隐式转换为WebService1.Service
。
我尝试过的:调用函数以返回正确的服务,但是参数或赋值都需要特定的类型。
var service = new WebService1.Service();
service = new WebService2.Service();
我希望能够在程序的其余部分中使用变量service
,而不必到处重复使用许多Web服务引用的代码。
答案 0 :(得分:0)
似乎您要执行的操作是,这两个服务之间需要一个公共接口,因此您可以注入要使用的任何服务。
public class WebService1 : IWebService {...service code}
public class WebService2 : IWebService{...service code}
public interface IWebService{...service methods you will be calling}
然后,您可以执行以下操作。
IWebService service = new WebService1.Service();
service = new WebService2.Service();
答案 1 :(得分:0)
假设不同的服务共享相同的方法名称,则可以使用该接口创建一个由所有服务实现的接口
IMyService.cs
interface IMyService
{
void MyMethod(string filter);
}
MyWebServiceImplementation.cs
public class MyWebServiceImplementation : IMyService
{
public void MyMethod(string filter);
}
MySecondWebServiceImplementation.cs
public class MySecondWebServiceImplementation : IMyService
{
public void MyMethod(string filter);
}
MyImplemetationCode.cs
//Use different services from same variable
IMyService service = new MyWebServiceImplementation();
service.MyMethod("filter");
service = new MySecondWebServiceImplementation();
service.MyMethod("another filter");