Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# IRequest/IResponse模式_C#_.net_Oop - Fatal编程技术网

C# IRequest/IResponse模式

C# IRequest/IResponse模式,c#,.net,oop,C#,.net,Oop,我正在尝试为Web API请求创建基于接口的请求/响应模式,以允许异步使用者/生产者处理,但不确定如何知道底层IResponse类是什么 public void Run() { List<IRequest> requests = new List<IRequest>(); List<IResponse> responses = new List<IResponse(); requests.Add(AmazonWebRequest); /

我正在尝试为Web API请求创建基于接口的请求/响应模式,以允许异步使用者/生产者处理,但不确定如何知道底层IResponse类是什么

public void Run()
{
   List<IRequest> requests = new List<IRequest>();
   List<IResponse> responses = new List<IResponse();
   requests.Add(AmazonWebRequest); //should be object, trying to keep it simple
   requests.Add(EBayWebRequest);  //should be object, trying to keep it simple

   foreach (IRequest req in requests)
   {
      responses.Add(req.GetResponse());
   }

   foreach (IResponse resp in response)
   {
      typeof resp????
   }
}

interface IRequest
{
   IResponse GetResponse();
}

interface IResponse
{
}

public class AmazonWebServiceRequest : IRequest
{
   public AmazonWebServiceRequest()
   {
      //get data;
   }

   public IResponse GetResponse()
   {
      AmazonWebServiceRequest request = new AmazonWebServiceRequest();
      return (IResponse)request;
   }
}

public class AmazonWebServiceResponse : IResponse
{
   XmlDocument _xml;
   public AmazonWebServiceResponse(XmlDocument xml)
   {
      _xml = xml;
      _parseXml();
   }

   private void _parseXml()
   {
      //parse Xml into object;
   }
}

public class EBayWebRequest : IRequest
{
   public EBayWebRequest ()
   {
      //get data;
   }

   public IResponse GetResponse()
   {
      EBayWebRequest request = new EBayWebRequest();
      return (IResponse)request;
   }
}

public class EBayWebResponse : IResponse
{
   XmlDocument _xml;
   public EBayWebResponse(XmlDocument xml)
   {
      _xml = xml;
      _parseXml();
   }

   private void _parseXml()
   {
      //parse Xml into object;
   }
}
public void Run()
{
列表请求=新列表();

列表响应=新建列表您可以检查如下类型:

if (resp.GetType() == typeof(AmazonWebRequest))
{
// do something
}
else if (resp.GetType() == typeof(EBayWebRequest))
{
// do something
}
但这可能会变得混乱,最好在接口上添加一个泛型方法来调用任何实现的类型,如

resp.Process();
然后在IResponse的每个实现中处理请求的处理