как получить зависимости, вводимые в конструкторы в Windows Forms - PullRequest
9 голосов
/ 05 февраля 2010

в asp.net-mvc У меня есть Windsor Controller Factory, которая внедряет все зависимости в контроллеры, но как вы получаете это в Windows Forms?

например, если у меня есть эта Form1, как я собираюсь получить экземпляр Form1, я должен использовать resol (который называется ppl ServiceLocator и anti-pattern)?

public class Form1
{
   private IBarService _barService;

   public Form1(IBarService barService)
   {
       _barService = barService;
   }
}

Ответы [ 2 ]

7 голосов
/ 05 февраля 2010

Использование Внедрение в конструктор для форм (или других представлений в других инфраструктурах пользовательского интерфейса) часто проблематично, поскольку конструктор Visual Studio ожидает и принимает конструктор по умолчанию.

В любом случае, форма или другой визуальный элемент управления действительно должен быть тупым видом без поведения. Его целью является отображение любых данных, которые вы связываете с ним. Использование функций привязки данных часто помогает ограничить вас этой пассивной формой отображения.

Это означает, что вам нужен какой-то контроллер , который может создавать экземпляр представления (формы) и привязывать к нему источник данных.

Это намного проще сделать с такой технологией, как WPF, но это также возможно с Windows Forms. Для вдохновения о том, как это сделать с помощью Windows Forms, я предлагаю вам взглянуть на (1012) * составной блок приложений - он слишком сложен, но должен дать вам некоторые идеи о том, как реализовать нечто подобное самостоятельно.

5 голосов
/ 05 февраля 2010

Да, в program.cs вы должны разрешить windsor Form1. Чтобы иметь возможность просматривать форму в конструкторе, вы добавляете пустой конструктор и украшаете его атрибутом Obsolete.

...