IoC для контролов
От: Аноним  
Дата: 19.01.13 14:27
Оценка:
Предполагается создать контейнер для контролов который будет по идеологии IoC работать с ними.

Рассуждения следующие :
1. Каждый контрол состоит из 2х частей , значение Value и состояние Enabled, Visible.
Соотвественно нужно описать 2 интерфейса

interface IControlValue<T>
{
   T Value { get; set; }
}

interface IControlVisual
{
  bool IsEnabled { get;set;}
  bool IsVisible { get;set;}
}

но вот затык , подумал
а) ведь еще нужно как-то указать где данный контрол будет располагаться, а это зависит от типа контейнера, например где-то потребуется X,Y координаты, где-то координаты в Grid ( row,column), где-то вообще координат не нужно ( DockPanel, StackPanel в WPF ).
б) еще есть контролы которым нужен какой-то заголовок, например RadioButton, Checkbox.

Как быть , наследоваться от IControlVisual и добавлять в новый интерфейс Caption ?
interface IControlVisualCaption : IControlVisual
{
   string Caption { get;set;}
}

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

в) еще есть контролы для работы со списками, например ComboBox. Можно отнаследоваться от IControlValue<T>
interface IControlMultiValue<T> : IControlValue<T>
{
     IEnumerable<T> Items { get;set;}
}

но ведь еще эти Items нужно откуда-то загрузить , тут наверное лучше добавить интерфейс IItemsProvider<T> ?

interface IControlMultiValue<T> : IControlValue<T>
{
IEnumerable<T> Items { get;set;}
IItemsProvider ItemsProvider { get;set;}
}


2) Но контролы могут быть составными, например Range контрол, содержит 2 контрола + лейбл между ними , [ ] по [ ]
как вот тут лучше реализовать ? Делать интерфейс с ValueMax, ValueMin и LabelCaption или иначе ? как это все обобщить с IControlValue<T>, ведь список контролов в контейнере должен содержать какой-то базовый интерфейс.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.