Как не раздать контейнер при использовании МОК в Winforms

boolean IsPalindrome(string s) {
return s = s.Reverse();
}
7
задан alexandrul 18 May 2010 в 05:43
поделиться

3 ответа

Сообщение Кена очень интересно, но сейчас стоит узнать больше о «производственных» контейнерах IoC, так как некоторые теперь поддерживают этот сценарий.

В Autofac например, вы можете «сгенерировать» фабрику в качестве делегата:

builder.RegisterGeneratedFactory<Func<IDialogController>>();

Затем в вашей основной форме:

class MainForm ... {

  Func<IDialogController> _controllerFactory;

  public MainForm(Func<IDialogController> controllerFactory) { ... }

  void ShowDialog() {
    using (var controller = _controllerFactory())
    {
    }
  }

Autofac заполнит параметр конструктора controllerFactory во время выполнения. Вместо этого в модульных тестах вы можете легко предоставить конструктору лямбду.

7
ответ дан 7 December 2019 в 03:17
поделиться

Единственное разумное решение, которое я нашел, - это сделать ваш контейнер синглтоном. Некоторые фреймворки IoC делают это за вас, но, возможно, вам придется развернуть собственную реализацию Singleton. Взгляните на идеи Джона Скита .

Удачи вам с MVC в Winforms. Это крутая кривая обучения, по которой я только начинаю подниматься.

1
ответ дан 7 December 2019 в 03:17
поделиться

Обычно я просто передаю интерфейс классу фабрики.

1
ответ дан 7 December 2019 в 03:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: