В каждой форме, производной от FormBaseControl, у нас есть следующий код. Я уверен, что есть лучший способ ввести объект контроллера, чем этот, но на данный момент он включен на каждую страницу. В приведенном ниже примере base.Controller относится к типу BaseController, от которого происходит ExportController. Я обнаружил дублирование этого кода в каждом производном FormBaseControl, чтобы не пахнуть правильно, но я не могу понять, как это исправить.
private ExportController MyController
{
get { return base.Controller as ExportController; }
}
protected void Page_Load(object sender, EventArgs e)
{
base.Controller = new ExportController(WebNavigator.Current);





Я думаю, здесь есть проблема дизайна.
Вы уверены, что MyController должен быть ExportControler (или любым другим), а не базовым (или производным классом)? Могут ли этого избежать промежуточный класс, интерфейс или дженерики?
Расскажите, пожалуйста, зачем вам все время переопределять MyControler.
Разве вы не можете использовать универсальный класс, чтобы исправить это?
Т.е. вместо:
private ExportController MyController
{
get { return base.Controller as ExportController; }
}
в производном классе.
Помещать:
protected T MyController
{
get { return this as T; }
}
в базовом классе и превратите базовый класс в универсальный класс BaseController<T>
Я не могу изменить BaseController, чтобы он принимал параметр универсального типа.
Ах. Значит, ты запутался :) Ладно. А как насчет вставки промежуточного класса, производного от BaseController, который принимает общий. Тогда другие классы могут быть производными от этого.
Ваше решение, похоже, путает базу контроллера и базу страницы, потому что MyController на базовой странице должен возвращать контроллер. Если он вернет это, as T завершится ошибкой.
В таком случае мне пришлось бы увидеть более полный пример :).
На самом деле это того не стоит, поскольку с этим практически невозможно справиться без серьезных обходных решений, и мы создаем новую страницу только каждые несколько месяцев или около того.
Здесь может быть проблема с дизайном, но я не собираюсь переделывать приложение с исходными файлами 13 КБ, которое в настоящее время развернуто для пользователей 5 КБ. :-( На странице экспорта мне нужен доступ к конкретным членам ExportController, которые недоступны в BaseController.