【发布时间】:2011-02-17 20:15:02
【问题描述】:
如果我要创建一个System.net.WebRequest 的界面,最好的方法是什么?
【问题讨论】:
-
我想第一个也是最重要的问题是......为什么?你想做什么?
如果我要创建一个System.net.WebRequest 的界面,最好的方法是什么?
【问题讨论】:
在 David 看来,您首先需要确定要对接口执行什么操作,然后才能决定它需要哪些成员。如果您想要一个用于单元测试的接口,我会推荐一种单独的方法。看看this question投票最多的答案吧。
但是,要严格按照要求回答您的问题,由于您无法修改 WebRequest 类,因此您首先要对其进行子类化:
public class MyWebRequest : WebRequest, IMyWebRequest
{
}
然后您可以将 WebRequest 公开的所有公共成员添加到 IMyWebRequest 中(删除您不想公开的成员):
public interface IMyWebRequest
{
Stream GetRequestStream();
WebResponse GetResponse();
IAsyncResult BeginGetResponse(AsyncCallback callback, object state);
WebResponse EndGetResponse(IAsyncResult asyncResult);
IAsyncResult BeginGetRequestStream(AsyncCallback callback, object state);
Stream EndGetRequestStream(IAsyncResult asyncResult);
void Abort();
RequestCachePolicy CachePolicy { get; set; }
string Method { get; set; }
Uri RequestUri { get; }
string ConnectionGroupName { get; set; }
WebHeaderCollection Headers { get; set; }
long ContentLength { get; set; }
string ContentType { get; set; }
ICredentials Credentials { get; set; }
bool UseDefaultCredentials { get; set; }
IWebProxy Proxy { get; set; }
bool PreAuthenticate { get; set; }
int Timeout { get; set; }
AuthenticationLevel AuthenticationLevel { get; set; }
TokenImpersonationLevel ImpersonationLevel { get; set; }
object GetLifetimeService();
object InitializeLifetimeService();
ObjRef CreateObjRef(Type requestedType);
}
【讨论】: