Я новичок в DI и IoC, и я пытаюсь решить, какой контейнер IoC выучить. Я видел несколько сравнений производительности в которых три упомянутых контейнера, похоже, работают очень хорошо. Тем не менее, я не нашел сравнения характеристик, которые включали Hiro или Simple Injector. Сообщество Autofac, по-видимому, является самым большим, но Hiro и Simple Injector невероятно быстрые в тестах, а Simple Injector, в частности, очень легко узнать. Тем не менее, я не хочу изучать один и переключиться на другой, потому что набор функций ограничен. По этой причине я склоняюсь к Autofac, так как он довольно зрелый и полный (хорошая статья здесь и здесь), а также является одним из самых быстрых контейнеров IoC. Кто-нибудь имел опыт работы с по крайней мере двумя из трех этих контейнеров? Можете ли вы предложить сравнение функций?
Простой инжектор против Хиро против Autofac
Ответ 1
Позвольте мне начать с того, что я ведущий разработчик Simple Injector.
Я согласен с Mark, что в большинстве случаев производительность контейнера не является проблемой. Тем не менее, некоторые контейнеры в некоторых случаях очень плохо себя чувствуют, и может быть сложно интуитивно понять, какие части конфигурации могут быть проблематичными с точки зрения производительности. Большинство проблем с производительностью можно устранить, изменив конфигурацию (меняя регистрацию на одноэлементный, добавляя кеширование и т.д.), Независимо от того, какой контейнер вы используете. Однако в этот момент может быть очень сложно сконфигурировать контейнер. Это такая сложность, которую мы пытались решить с помощью Simple Injector. Мне нравится позволять другим решать, удалось ли нам (или иметь контейнер DI, или еще один контейнер DI даже полезен).
Производительность, однако, даже не была такой высокой в моем первоначальном списке, когда я начал проект (простота была), но дизайн (без блокировки и Expression
на основе дерева) позволил мне делать оптимизации, которые делают его одним из самый быстрый контейнер в поле (при этом все еще очень богатый функциональностью и очень расширяемый). В большинстве случаев вы обнаружите, что производительность очень близка к новым экземплярам вручную.
Это говорит о том, что для обучения инъекции зависимостей требуется больше времени, чем требуется, чтобы научиться работать с конкретным контейнером DI (Отметить книгу может реально помочь с обоими). Контейнер - простой инжектор - не поможет вам понять DI и SOLID (однако некоторые из его ограничений пытаются заставить вас чистый дизайн приложения).
Простой инжектор довольно новый (или поздний) на сцене DI. Из-за этого между ним и другими нет большого сравнения (хотя здесь есть и здесь), а количество пользователей ограничено по сравнению с другими фреймворками, но быстро растет (и согласно расширенные сценарии в разделе документация). Простой инжектор отсутствует в сравнении с вами ( часть 1 и часть 2), поэтому здесь список функций для Simple Injector (но обратите внимание, что Simple Injector добавлен в одно из более новых сопоставлений автора)
- Framework: Простой инжектор
- Версия: 3.0
- Лицензия: MIT
- Минимальные dll: 1
- Размер: 342 КБ
- Свободно: не нужен, только программный
- Автоматическая регистрация: включена
- Использование атрибутов: не включено (но возможно по расширению)
- Использование XML: не поддерживается
- Ввод свойств: да (выбор).
- Инъекция конструктора: да
- Несколько конструкторов: не включены, но expandable
- Рекурсивная зависимость: значимая ошибка
- Синглтон: да
- Переходный: yes
- Другое/Пользовательское: да, подключаемый
- Пользовательские экземпляры: поддерживается
- Открытые дженерики: включены
- Разрешение незарегистрированного типа: yes
- Автоматическое издевательство: не включено, но расширяемый.
- Специальные функции: Диагностические службы, Регистрация декораторов для общих типов, частичные открытые генерики, условная/контекстная регистрация и performance. Существуют пакеты расширения NuGet для образа жизни, такие как Веб-запрос и Обзор времени жизни. API на основе
Expression
позволяет добавлять поддержку почти любого расширенного сценария, например interception (хотя использование декораторов продвигается).
Я понятия не имею, каковы ваши требования, но я уверен, что Simple Injector может служить вам на всю жизнь вашего проекта. Если у вас возникли проблемы с этим, просто спросите здесь, на Stackoverflow.com или на форуме Simple Injector. Простые вкладчики Инжектора и другие энтузиасты с радостью помогут вам. И не забывайте, что есть группа fooobar.com/info/tagged/..., которые могут помочь вам в общих проблемах с DI.