Добрый Всем День!
Есть десктопное приложение, в котором есть классы-FormBased (рабочие формы). Сейчас отделили поставщика данных от локального сервера и с помощью интерфейсов вывели поставку чз веб. Это ура,НО! Сейчас это выглядит примерно так :
public class WorkForm
inherits Form
public Sub Something()
using iThisRepo as IThisRepository = DIContainer.Resolve(Of IThisRepository)()
' using iThisRepo ...
end using
end sub
end class
А хотелось бы
public class WorkForm
inherits Form
private m_iThisRepo as IThisRepository
public sub New(iThisRepo as IThisRepository)
m_iThisRepo = iThisRepo
end sub
public Sub Something()
' using iThisRepo ...
end sub
end class
Как это сделать в принципе понятно. Создаем процедуру старта, подкатываем контейнер зависимостей,тра-ля-ля...
Вопрос в том, что если с именно с интерфейсами у этой формы все ясно, то как инициализировать те интерфейсы, которые подтянутся с котролов и диалогов, которыми эта форма будет пользоваться.
На текущий момент у меня такие варианты:
1) Тащим их всех на конструктор формы
public class WorkForm
inherits Form
private m_iThisRepo as IThisRepository
private m_iForContol1_1 as IForControl1_1
private m_iForContol1_2 as IForControl1_2
private m_iForDialog1_1 as IForDialog1_1
private m_iForDialog1_2 as IForDialog1_2
...
public sub New(
iThisRepo as IThisRepository, _
iForContol1_1 as IForControl1_1, _
iForContol1_2 as IForControl1_2, _
iForDialog1_1 as IForDialog1_1, _
iForDialog1_2 as IForDialog1_2, _
...
)
m_iThisRepo = iThisRepo
m_iForContol1_1 = iForContol1_1
m_iForContol1_2 = iForContol1_2
m_iForDialog1_1 = iForDialog1_1
m_iForDialog1_2 = iForDialog1_2
...
ComponentInitialize()
m_control1.Init(m_iForContol1_1, m_iForContol1_2)
end sub
public Sub Something2()
using d as new MyDialog1(m_iForDialog1_1, m_iForDialog1_2)
...
end using
end sub
end class
плюс — очевидность с чем форма собирается работать
минус — нужно вытаскивать все интерфейсы на "поверхность" этой "стартовой" формы
2) Оставляем как есть, используя местное
' где-то в недрах MyDialog1
using iRepoForDialog1 as IRepositoryForDialog1 = DIContainer.Resolve(Of IRepositoryForDialog1)()
' using iRepoForDialog1 ...
end using
плюс — работает
минус — неконтролируемая реализация интерфейсов
3) Есть вариант взглянуть на решение под другим углом:
public class WorkForm
inherits Form
private m_iThisRepo as IThisRepository
private m_iContol1 as IControl1
private m_iDialog1 as IDialog1
...
public sub New(
iThisRepo as IThisRepository, _
iContol1 as IControl1, _
iDialog1 as IDialog1, _
...
)
m_iThisRepo = iThisRepo
m_iContol1 = iContol1
m_iDialog1 = iForDialog1
...
ComponentInitialize()
' -->> Тогда как проинициализировать контрол используя генератор не понимаю <<--
end sub
public Sub Something2()
' -->> Здесь все просто <<--
m_iDialog1.Something(...)
end sub
end class
Заранее спасибо,Илья
ПС: если велосипед — сильно не пинать
... Мы не привыкли отступать! И расколоть его поможет киножурнал "Хочу Все Знать"! ;)