C# IRequest/IResponse模式
我正在尝试为Web API请求创建基于接口的请求/响应模式,以允许异步使用者/生产者处理,但不确定如何知道底层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); /
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的每个实现中处理请求的处理