Как расширить System.Web.Services.WebService без нового имени класса? - PullRequest
0 голосов
/ 19 августа 2011

Я пытался сделать это в нескольких различных формах, и это только самое последнее.Обычно я ворочаюсь в течение нескольких часов и никуда не попадаю, поэтому я хотел бы поставить вопрос здесь с моим реальным примером.

У меня есть веб-сервисы, с которых я пишу XML, чтобы люди могли получать информацию изнаш сервер, поэтому у меня есть:

(namespace)
public static class WebServices
{
    public static void WriteXML(this WebService svc, DataSet results)
    {
        if (results != null)
            HttpContext.Current.Response.Write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?><xsl:stylesheet version=\"1.0\" " +
                "xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" xmlns=\"http://www.w3.org/1999/xhtml\">" + results.GetXml() + "</xsl:stylesheet>");
    }
}

К сожалению, это доступно только делать:

using (namespace)
....
this.WriteXML(DataSet);

Когда я хочу

using (namespace)
....
WriteXML(DataSet);

Чего мне не хватает, чтобы сделатьтак?

Ответы [ 3 ]

1 голос
/ 19 августа 2011

вы написали метод расширения для WebService - ваш первый параметр - this WebService svc, что, в свою очередь, означает, что ваш метод расширения WriteXML может быть вызван только для экземпляра WebService.

0 голосов
/ 19 августа 2011

Вы можете поместить этот метод в базовый класс, а затем извлечь все ваши веб-сервисы из базового класса.Базовый класс будет производным от WebService.

Кстати, если вы не используете члены класса WebService, вам вообще не нужно его извлекать.Вы можете просто украсить свои классы веб-службы с [WebService].

0 голосов
/ 19 августа 2011

Вы могли бы избежать возможности добавить метод, если бы он был частичным классом, но в документах MSDN он не говорит, что он частичный.Вы должны расширить его методами расширения и использовать ключевое слово this для доступа к нему.Пять дополнительных персонажей не кажутся мне слишком плохими.Есть ли другая причина, по которой вы не хотите использовать ключевое слово?

...