Использование универсальных типов с пользовательским элементом управления asp.net - PullRequest
3 голосов
/ 23 января 2010

На днях я создал пользовательский элемент управления, который динамически создает отображение данных из заданного пользовательского бизнес-объекта.

Он работает хорошо, но я хотел бы использовать элемент управления в других приложениях, и способ его инкапсуляции в настоящее время не соответствует пар.

Мой пользовательский элемент управления содержит только основные элементы управления html инесколько внутренних свойств, чтобы я мог получить к ним доступ из моего другого класса.

В той же сборке у меня есть класс DataManager - он принимает IEnumerable и ссылку на связанный с ним пользовательский элемент управления.Проблема заключается в том, что мне приходится обрабатывать детали реализации, такие как перерисовка Page_Init со страницы, вызывающей элемент управления, поскольку фактический пользовательский элемент управления не знает о T.

Есть ли способ передать универсальный тип в пользовательский элемент управленияупростить вещи или способ хранить ссылку на объект DataManager без указания T?

Спасибо за помощь!

1 Ответ

2 голосов
/ 25 января 2010

Вот пара идей, мыслей:

Вы пытаетесь добиться разделения между вашей презентацией (пользовательский контроль) и конкретным типом вашего бизнес-объекта.

Но возникают проблемы, потому что вы тесно связали доступ к данным (DataManager) и презентацию (пользовательский контроль) вашего приложения.

Возможно, вам следует перенести свою цель на отделение уровня представления от бизнес-объектов и уровня данных.

Вот некоторые идеи, которые могут помочь вам достичь этого: 1) Подумайте о создании свойства в пользовательском элементе управления, который содержит данные, и задайте это свойство при загрузке страницы или инициализации страницы. Если вы столкнетесь с жизненным циклом страницы, поскольку загрузка страницы управления запускается до того, как событие загрузки страницы просто создаст ваш собственный метод связывания в вашем пользовательском элементе управления и вызов его после установки свойства пользовательских элементов управления с данными 2) Создайте интерфейс или модель представления для данных, передаваемых в пользовательский элемент управления, и используйте его в качестве типа свойства, содержащего ваши данные - вы можете оставить тип универсальным, но я изо всех сил пытаюсь представить себе пользовательский элемент управления, который будет работать с любым бизнес-объектом, который я могу придумать, так что это кажется плохой идеей 3) Независимо от деталей реализации, ваш DataManager, имеющий ссылку на пользовательский элемент управления, - это то, что вам нужно изменить. Объект с именем DataManager должен нести единоличную ответственность, он должен получать данные и не знать о пользовательском контроле или представлении вашего приложения

Надеюсь, это поможет. Всего лишь одно мнение, удачи.

...