Ninject в .NET Core

Я пытаюсь установить Ninject 3.3.2 в .NET Core, выпущенном в мае 2016 года. Я получил ошибку: Зависимость Ninject 3.2.2 не поддерживает фреймворк .NETCoreApp, Version = v1.0. У кого-нибудь была подобная проблема, и есть ли решение для этого?

Ответы на вопрос(4)

Ninject3.3.0 был выпущен 26 сентября 2017 года и теперь цели.NET Standard 2.0 и таким образом также работает на.NET Core 2.0.

Судя по ходу событий (см. Проблемы / обсуждения на GitHub), представляется вероятным, что некоторые изменения в 4.0-бета будут отменены. Я бы не ожидал финала 4.0 в ближайшее время. Следовательно, я бы посоветовал перейти с текущей версии 3 выпуска.

 SimonGates05 окт. 2017 г., 11:41
Любая документация или указатели о том, как интегрировать это в проект ASP.Net Core, предполагая, что расширение AspNetCore Ninject в настоящее время не доступно?
 Joseph16 февр. 2018 г., 00:36
Обратите внимание, что Xamarin.iOS не поддерживает пространство имен System.Reflection.Emit. Это означало, что использование Ninject, созданного для .NET Standard, было для меня невозможным. Мне пришлось использовать библиотеку, созданную для MonoTouch.
 VMAtm07 окт. 2017 г., 02:20
Вы можете реализовать необходимый интерфейс самостоятельно:kristian.hellang.com/...

вместо этого мы можем использовать внедрение зависимостей .net core. Ниже приведены шаги для реализации.

Перейти к startup.cs наpublic void ConfigureServices(IServiceCollection services)добавлятьservices.AddTransient<Interface, Class>();Перейдите к контроллеру, где вы хотите применить внедрение зависимости.Создать глобальныйprivate Interface _propertyName;Передайте переменную типа интерфейса в конструктор, как

 public Constructor(Interface name)
 {
     _propertyName= name;
 }
Теперь вы можете получить доступ к членам класса через _propertyName.
Решение Вопроса

чтобы убедиться, что нет версии, поддерживающей его.

В ASP.NET Core встроен собственный контейнер внедрения зависимостей.Вот.

 Hrvoje Hudo16 нояб. 2016 г., 12:39
Этот комплектный IOC / DI действительно прост. Вы должны использовать соответствующий контейнер, такой как Autofac или StructureMap, и просто игнорировать встроенный контейнер.
 Jafin28 июн. 2018 г., 02:36
Этот ответ неверен (для Core 2.0), см. Ответ @BatteryBackupUnit

хотя оба предыдущих ответа верны в том смысле, что ядро ​​ASP.Net обеспечивает встроенное внедрение зависимостей, этого недостаточно для более сложных сценариев. Так как он не поддерживает целый ряд функций, которые поддерживает Ninject, AutoFac, Unity или StructureMap.

В настоящее время я знаю только о тех библиотеках DI, которые полностью поддерживают ядро ​​.net, - AutoFac.Единство также. Это очень просто добавить. Единственное, что вам нужно сделать, чтобы заменить встроенный DI, это следующее. Этот пример для AutoFac, но он почти идентичен для Unity.

Во-первых, замените void на ConfigureServices в startup.cs на IServiceProvider (зависимость от AutoFac) следующим образом:

public IServiceProvider ConfigureServices(IServiceCollection services)

Затем создайте контейнерный конструктор, постройте и разрешите IServiceProvider из ConfigureServices:

var builder = new ContainerBuilder();
builder.Populate(services);
var container = builder.Build();
return container.Resolve<IServiceProvider>();

У меня есть обертка вокруг этой второй части, которая позволяет вам динамически загружать и создавать различные конфигурации с использованием модулей AutoFac, которые я мог бы убедить загрузить в GitHub или что-то еще, если есть интерес.

 Brandon14 нояб. 2016 г., 17:21
Я также должен добавить, что я наткнулся на репозиторий github, который имеет своего рода «адаптер», который позволяет использовать Ninject в ядре .net. Это немного «обходной путь», на мой взгляд, но, похоже, должно работать.github.com/dotnetjunkie/Missing-Core-DI-Extensions
 Brandon03 янв. 2017 г., 20:16
Похоже, что Ninject 4.0 может поддерживать ядро ​​.net. Хотя его все еще в бета-версии.

Ваш ответ на вопрос