2011-12-17 2 views
0

Я пытаюсь использовать вместо обычного HttpWebRequestHttpWebRequest потомок

// get a login page 
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://www.facebook.com/"); 

моего настроенного класса FacebookHttpWebRequest, которые выглядят так:

// get a login page 
FacebookHttpWebRequest req = (FacebookHttpWebRequest)WebRequest.Create("http://www.facebook.com/"); 

Здесь настраивается реализация класса

class FacebookHttpWebRequest : HttpWebRequest 
    { 
     public FacebookHttpWebRequest() : base() 
     { 
      this.UserAgent = "Mozilla/5.0 (Windows NT 5.1; rv:8.0.1) Gecko/20100101 Firefox/8.0.1"; 
      this.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";    
     } 
    } 

, но возникает ошибка Ошибка

'System.Net.HttpWebRequest' не содержит конструктор, который принимает 0 аргументы

И это действительно требует два аргумента: serializationInfo и streamingContext.

Так как я могу сделать свой собственный HttpWebRequest потомок? Я знаю, что могу использовать специальный метод, который будет настраивать обычный HttpWebRequest, но для этого будет более элегантно иметь специальный класс.

+0

* Почему * Вы хотели бы сделать это? Если вы сомневаетесь, вы должны одобрить композицию над наследованием, т. Е. Создать класс с «HttpWebRequest» в качестве поля. –

+0

Я хочу, чтобы каждый раз настраивал экземпляр HttpWebRequest, а не настраивал его каждый раз. – kseen

+2

Затем создайте * функцию *, которая создает экземпляры и возвращает настроенные. Наследование является излишним в этом сценарии. –

ответ

2

Для этого вам не требуется наследование. Просто оберните логин создания в вашей собственной фабрике:

static class FacebookWebRequestFactory { 
    public static HttpWebRequest Create() { 
    var req = (HttpWebRequest)WebRequest.Create("http://www.facebook.com/"); 
    req.UserAgent = "Mozilla/5.0 (Windows NT 5.1; rv:8.0.1) Gecko/20100101 Firefox/8.0.1"; 
    req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";    
    return req; 
    } 
} 

Используйте это так:

var req = FacebookWebRequestFactory.Create();