С чего мне начать?
В процессе обучения программированию встречаются шаблоны проектирования, архитектурные решения и т. Д. Для меня я концептуально понимаю 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. Что мне нужно? где я могу это разместить? Как мне заставить его работать? Должен ли я застрять с мечом везде, где у меня есть оружие? Что я делаю на работе, когда на улице светит солнце?