Ninject в .NET Core

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

Ответ 1

Ninject не поддерживает .NET Core. Вы можете проверить его на сайте, чтобы убедиться, что нет версии, которая ее поддерживает.

В ASP.NET Core встроен собственный контейнер Injection Dependency. См. здесь.

Ответ 2

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

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

Ответ 3

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

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

Сначала замените пустоту на 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 или что-то в этом случае, если у вас есть интерес.

Ответ 4

.Net Core не поддерживает Ninject, вместо этого мы можем использовать инъекцию зависимости ядра .net. Ниже приведены шаги для реализации.

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

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