2013-08-08 1 views
1

У меня есть ситуация, когда я хотел бы написать расширение, которое может быть использовано как на HttpResponse & HttpResponseBase.Расширение записи для HttpResponse & HttpResponseBase

После некоторых исследований выяснилось, что оба являются братьями и сестрами, но только путем простого расширения класса Object.

И так как вы можете определить только общий класс с одним конкретным классом, я столкнулся с проблемой написать один и тот же метод дважды для обработки двух разных объектных моделей: перенаправления веб-приложений и перенаправления MVC.

Текущая реализация, хотя я не люблю:

public static void RedirectTo404(this HttpResponseBase response) 
{ 
    response.Redirect("~/404.aspx"); 
} 
public static void RedirectTo404(this HttpResponse response) 
{ 
    response.Redirect("~/404.aspx"); 
} 

Я хотел бы иметь что-то вроде этого (я знаю его синтаксически не возможно, но, чтобы дать представление)

public static void RedirectTo404<T>(this T response) where T : HttpResponseBase , HttpResponse 
{ 
    response.Redirect("~/404.aspx"); 
} 
+0

Вы используете ASP.Net Mvc и какую версию? –

+0

Не конкретно MVC, но у меня есть проекты, в которых мы используем MVC/EF и ASP.Net/EF. Так что было бы неплохо иметь универсальную библиотеку. – GoldBishop

ответ

5

Есть делегат версии HttpResponse до версии HttpResponseBase путем вызова его new HttpResponseWrapper(response). Это избавит вас от дублирования тела кода.

Или имеет общий метод, принимающий параметр динамического типа. Я бы не выбрал этот метод, потому что он динамически типизирован без уважительной причины.

public static void RedirectTo404(this HttpResponseBase response) 
{ 
    response.Redirect("~/404.aspx"); 
} 
public static void RedirectTo404(this HttpResponse response) 
{ 
    RedirectTo404(new HttpResponseWrapper(response)); //delegate to implementation 
} 
+0

выведите пример, чтобы я мог точно видеть, как вы его себе представляете. – GoldBishop

+0

Здесь вы идете. _____ – usr

+0

Хорошо, поэтому Wrapper используется для получения традиционного HttpResponse и делает его HttpResponseBase? – GoldBishop

Смежные вопросы