Сервисный контейнер или IoC для WinForms предложения - PullRequest
1 голос
/ 06 апреля 2011

Я пишу приложение в WinForms и спрашиваю себя, использовать ли IoC или контейнер.

Мы пишем текстовый редактор для нашего собственного базового языка стилей BASIC для расчета сборов и т. Д. Это что-то вроде Notepad ++, но не так много функциональности и отладчика.

Мне интересно, должен ли я использовать Контейнер или IoC, и на что мне следует выбрать. Будучи приложением WinForms и имея при запуске довольно много вещей (загрузка синтаксического движка, настройка пользовательского интерфейса и т. Д.), Вы думаете, я могу даже использовать IoC?

С контейнером я могу сделать его статическим классом и просто выполнить Container.GetInstance (), но не могу понять, как можно подключить IoC, когда некоторые классы будут зависеть от других и т. Д.

У меня также есть целый ряд команд, для которых я хочу использовать шаблон COmmand, поэтому определите ICommand и добавьте ITextCommand, IFormulaCalculationCommand, IDebugCommand для конкретных областей. Как бы я даже использовал IoC, чтобы сказать, что можно получить активный документ на вкладке с помощью одной из этих команд?

Это все очень смущает меня сейчас, и я прошу прощения.

Вот несколько коротких вопросов, если вы не можете точно ответить на вышесказанное:)

  • Какой самый быстрый и простой контейнер (ServiceContainer?)
  • Вы бы порекомендовали IofC как Autofac для этого проекта Windows Forms?
  • Можете ли вы реализовать IoC и при этом использовать шаблон команд для вызова команд и получения активного документа, который редактируется и т. Д.?

1 Ответ

2 голосов
/ 06 апреля 2011

Прежде всего, «IoC» означает « инверсия управления », и это концепция (не конкретный программный компонент), которая тесно связана с зависимость внедрения . Контейнер (который является программным компонентом) является контейнером ввода зависимостей . Так что не только "IoC" и "контейнер" две сущности, которые нельзя сравнивать, они также находятся внутри одного и того же "лагеря", так сказать.

Поэтому вопрос лучше сформулировать так: «Должен ли я использовать DI-контейнер для своего приложения?».

Существует несколько DI-контейнеров, которые вы можете выбрать: Microsoft Unity, Castle Windsor и NInject - некоторые из наиболее известных (до сих пор я не знал об Autofac). Выберите один и продолжайте с ним; в вашем случае практических различий не будет, и вы всегда сможете относительно легко переключиться на другой, если возникнет такая необходимость.

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

Наконец, нет никакого отношения между контейнером DI и шаблоном команды или чем-то подобным. Если вы хотите получить активный документ, просто сохраните то, что активный документ находится в переменной, всякий раз, когда он изменяется, и читайте эту переменную, когда вам нужно. Контейнер вообще не входит в него.

Обновление: Добавление ссылки на весьма актуальный вопрос Какие платформы .NET Dependency Injection стоит изучить?

...