Самый спорный пост, IoC, Ninject, просто заставляем вещи работать - PullRequest
6 голосов
/ 28 марта 2011

С чего мне начать?

В процессе обучения программированию встречаются шаблоны проектирования, архитектурные решения и т. Д. Для меня я концептуально понимаю DI, IoC и почему они нужны / хороши. Модульность, низкое сцепление, высокая когезия - я понял.

Например, я создаю небольшой тестовый веб-сайт с помощью шаблона MVP, в котором докладчик не имеет конкретного представления, но использует интерфейс, который реализует представление. Он также имеет ссылку на сервисный уровень (который находится между докладчиком и BLL), опять же, ничего конкретного, используя для этого интерфейс. Все хорошие вещи.

(Вручную) IoC создает экземпляры конкретных объектов, перемещаемых вверх, до такой степени, что объекты необходимо вводить где-то, где-то. Другими словами, зависимость все еще существует, она только выше. Введите IoC контейнеры. И введите разочарование.

Я знаю, что они там, я знаю, для чего они используются. Я решил использовать ninject. Здорово. Итак, я начинаю искать. В моей загрузке у меня есть куча файлов:

  • LICENSE.TXT
  • Ninject.dll
  • Ninject.pdb
  • Ninject.xml

другая папка, называемая расширениями

  • CommonServiceLocator.NinjectAdapter.dll
  • CommonServiceLocator.NinjectAdapter.pdb

Хорошо ... куча файлов. Какой использовать? Я не знаю. Где я могу их разместить? Нужны ли они все? Вопросы вопросы ...

Возможно, прочитайте какое-нибудь руководство. Ninject wiki @ github. Правильно. Я начинаю читать - зачем использовать Ninject? Инъекция зависимости вручную, инъекция зависимости с помощью Ninject - хорошие примеры мечей и кинжалов и тому подобное. Но я нигде не читаю, как на самом деле делать / использовать . Где я могу разместить его в Visual Studio? Как это назвать? Как?

Кроме того, он представляет мне этот код:

Bind<IWeapon>().To<Sword>();

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

В нем говорится, что когда у вас есть куча конструкторов, он возьмет только тот, у которого больше всего параметров. Хорошо. Что это делает с конструкторами, которые имеют немного меньше параметров, чем конструктор с наибольшим количеством? Разве я не могу использовать ninject с этими конструкторами? Или ... как это работает? Опять же - нигде не сказано. Проклятия!

В вики есть ссылка на Самый спорный пост на SO. Речь идет о парне по имени Джоэл, который говорит кое-что о IoC, который включил пламенную войну / болван. Но вы знаете, что? Смею сказать, что я как бы болею за этого парня. Зачем? Может быть, концепция IoC проста, но, черт возьми, до такой степени, что я наконец-то узнал, как ее использовать, что делать в определенных ситуациях и т. Д., Действительно действительно расстраивает. Поиски в Google в основном приводят к тому, что ничего полезного не получается, или вообще много чего можно прочитать, запутавшись между ними. Я нахожу, что парень может быть прав в некотором смысле - в том смысле, что действительно трудно понять концепции и объяснить тому, кто не понимает, что вы находите простым.

Почему это не может быть больше похоже на «Загрузите файлы - достаньте этот файл и поместите его где-нибудь под рукой, затем перейдите в Visual Studio, создайте новую карту и создайте ссылку на dll. Чтобы использовать это, выполните следующие действия», а затем объясняя каждый шаг с очень хорошим и подробным объяснением. Нет фрагментов кода. Это расстраивает.

Итак, можно задаться вопросом, каков мой вопрос. Ну, я хочу использовать Ninject. Что мне нужно? где я могу это разместить? Как мне заставить его работать? Должен ли я застрять с мечом везде, где у меня есть оружие? Что я делаю на работе, когда на улице светит солнце?

Ответы [ 2 ]

6 голосов
/ 30 марта 2011

У меня есть очень простой набор примеров кода для ninject, который я сделал для некоторых наших разработчиков, когда мы вводили его в наш проект. Это просто охватывает основные привязки и тому подобное прямо сейчас. Не так много с тем, как он работает с MVC или более сложными темами, такими как контекстные привязки. Все это сделано в виде тестов nUnit, поэтому я надеюсь, что за ним легко следовать. Чего он НЕ показывает, так это как правильно включить его в ваш проект. Я надеюсь вскоре сделать настоящий пример проекта MVC.

https://github.com/ryber/Ninject-Examples

Надеюсь, это поможет.

2 голосов
/ 28 марта 2011

Для веб-проектов я рекомендую использовать MVC3.См. https://github.com/ninject/ninject.web.mvc/wiki/MVC3 о том, как заставить его работать с Ninject.

...