У меня есть страница, которая настроена так
public partial class _Default : ViewBasePage<EmployeePresenter, IEmployeeView>,
IEmployeeView
{
...
}
Внутри моей базовой страницы
public abstract class ViewBasePage<TPresenter, TView> :
Page where TPresenter : Presenter<TView> where TView : IView
{
protected TPresenter _presenter;
public TPresenter Presenter
{
set
{
_presenter = value;
_presenter.View = GetView(); // <- Works
//_presenter.View = (TView)this; <- Doesn't work
}
}
/// <summary>
/// Gets the view. This will get the page during the ASP.NET
/// life cycle where the physical page inherits the view
/// </summary>
/// <returns></returns>
private static TView GetView()
{
return (TView) HttpContext.Current.Handler;
}
}
То, что мне нужно сделать, это на самом деле привести (TView)_Default, использование моего метода GetView() действительно заканчивается этим результатом. Внутри базовой страницы я не могу сделать
_presenter.View = (TView)this;
Потому что на самом деле это ViewBasePage<TPresenter,TView>
, поэтому он не может напрямую передавать только TView.
Итак, мой фактический вопрос, есть ли какие-либо альтернативные способы достижения моего результата таким образом, который кажется менее хакерским, если это основной вариант, действительно ли мне нужно беспокоиться о чем-то, обрабатывая мою страницу таким образом?
Изменить:
Точная часть, которую я пытаюсь записать, это
private static TView GetView()
{
return (TView) HttpContext.Current.Handler;
}
так как я чувствую, что это довольно грубый взлом, чтобы иметь возможность ссылаться на страницу в этом контексте.