none
Посоветуйте IoC библиотеку взамен Ninject RRS feed

  • Общие обсуждения

  • Добрый день!

     Посоветуйте, пожалуйста, библиотеку IoC вместо Ninject.

    До этого использовал Ninject, но наткнулся на вот этот давнишний бэнчмарк

    http://www.palmmedia.de/blog/2011/8/30/ioc-container-benchmark-performance-comparison

    И Ninject в данном случае аутсайдер.

    Лучше себя здесь демонстрирует LightInject, к примеру.

    Но! Он лишен всяких фишек, которые есть у Ninject, к примеру закрепления класса в качестве синглетона:

    kernel.Bind<ServiceName>.To<ServiceName>().InSingletonScope(); 

    Вот и обращаюсь к гуру сообществу, что можете посоветовать в качестве IoC ?

    6 апреля 2015 г. 13:56

Все ответы

  • Можете использовать Unity.

    Сделаем содержимое сообщества лучше, вместе!

    6 апреля 2015 г. 19:07
    Модератор
  • У Autofac всё есть

    Calabonga

    6 апреля 2015 г. 21:43
  • Начал пробовать в Autofac - в принципе все понравилось.

    Но в юнит-тестах выскочила ошибка при использовании AutofacDependencyResolver:

    The request lifetime scope cannot be created because the HttpContext is not available.

    Т.е. ему нужно на старте закидывать HttpContext. Не совсем удобно, как мне кажется.

    8 апреля 2015 г. 10:03
  • Попробовал Unity - все хорошо. Но реализация сервис классов в качестве синглетонов сделано не очень хорошо через

    RegisterInstance

    А это уже требует создания объекта класса сервиса уже на стадии инициализации контейнера IoC.

    8 апреля 2015 г. 13:34
  • Начал пробовать в Autofac - в принципе все понравилось.

    Но в юнит-тестах выскочила ошибка при использовании AutofacDependencyResolver:

    The request lifetime scope cannot be created because the HttpContext is not available.

    Т.е. ему нужно на старте закидывать HttpContext. Не совсем удобно, как мне кажется.

    А зачем вы в unit-test используете контейнер? Тестируйте отдельные реализации интерфейсов, подкидывая зависимости в виде моков с предсказуемым поведением.

    Ну или собирайте контейнер в общем виде (без AutofacDependencyResolver).

    15 апреля 2015 г. 11:40
  • >>>А зачем вы в unit-test используете контейнер?

    Контейнер мне нужно инициализировать в нескольких тестах, т.к. некоторые  методы, которые я тестирую, взаимодействуют с другими классами посредством IDependencyResolver и тут загушками не обойдешься.

    >>>  Ну или собирайте контейнер в общем виде (без AutofacDependencyResolver).

    Тоже как вариант.

    Я поступил по другому: в конструктуре абстрактного класса тестирования, где инициализирую IoC, добавляю следующее:

    HttpContext.Current = new HttpContext(
                  new HttpRequest("", "http://temp.temp", ""),
                  new HttpResponse(new StringWriter())
                );

    16 апреля 2015 г. 3:21
  • Контейнер мне нужно инициализировать в нескольких тестах, т.к. некоторые  методы, которые я тестирую, взаимодействуют с другими классами посредством IDependencyResolver и тут загушками не обойдешься.

    Ну вообще опять же ничего не мешает мокнуть IDependencyResolver и отдавать уже нужные заглушки :)

    Но для меня все же странно. Как я понял, ваш класс получает IDependencyResolver и уже у него запрашивает нужные интерфейсы. Почему не инжектить нужное сразу?

    16 апреля 2015 г. 6:24