Самый спорный пост, IoC, Ninject, просто заставляем все работать

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

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

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

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

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

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

другая папка с именем extension

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

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

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

Кроме того, он представляет мне следующий код:

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

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

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

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

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

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

6
задан Rob W 18 December 2011 в 15:02
поделиться