С чего мне начать?
В процессе обучения программированию человек сталкивается с шаблонами проектирования, архитектурным выбором и т. Д. Я понимаю концептуально DI, IoC и почему они нужны / хороши. Модульность, низкая взаимосвязь, высокая связность - я понимаю.
Например, я создаю небольшой тестовый веб-сайт с помощью шаблона MVP, где у докладчика нет конкретного представления, но используется интерфейс, который вид орудия. Он также имеет ссылку на уровень обслуживания (который находится между докладчиком и BLL), опять же, ничего конкретного, с использованием интерфейса для этого. Все хорошие вещи.
(ручной) IoC создает экземпляры конкретных объектов, вытолкнутых вверх, до такой степени, что объекты нужно внедрить куда-то, куда-нибудь. Другими словами, зависимость все еще есть, она просто выше. Войдите в контейнеры IoC. И введите разочарование.
Я знаю, что они там, я знаю, для чего они используются. Я решил использовать нинджект. Круто. Итак, я начинаю искать. В моей загрузке у меня есть куча файлов:
другая папка с именем extension
Хорошо ... куча файлов. Что использовать? Я не знаю. Где их разместить? Все ли они мне нужны? Вопросы вопросы ...
Может почитать мануал. 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? Что я делаю на работе, когда на улице светит солнце?