web-dev-qa-db-fra.com

Ninject dans .NET Core

J'essaie d'installer Ninject 3.3.2 dans .NET Core, publié en mai 2016. J'ai une erreur: la dépendance Ninject 3.2.2 ne prend pas en charge le framework .NETCoreApp, Version = v1.0. Quelqu'un a-t-il eu un problème similaire et existe-t-il une solution?

15
Dejan Dimčić

Ninject ne prend pas en charge .NET Core. Vous pouvez vérifier son site Web pour vous assurer qu'aucune version ne le prend en charge.

ASP.NET Core possède son propre conteneur d'injection de dépendances intégré. Voir ici .

4

Ninject 3.3.0 est sorti le 26 septembre 2017 et cible désormais . NET Standard 2.0 et fonctionne donc également sur . NET Core 2.0 .

D'après le cours des choses (voir les problèmes/discussions sur GitHub), il semble probable que certains des changements dans la 4.0-beta seront annulés. Je ne m'attendais pas à une finale 4.0 sous peu. Par conséquent, je conseillerais d'aller avec la version actuelle de la version 3.

31

Je voulais juste ajouter; Bien que les deux réponses précédentes soient correctes dans la mesure où le cœur ASP.Net fournit une injection de dépendance intégrée, il n'est PAS suffisant pour des scénarios plus avancés. Comme il ne prend pas en charge un ensemble complet de fonctionnalités prises en charge par Ninject, AutoFac, Unity ou StructureMap.

À l'heure actuelle, les seules bibliothèques DI que je connaisse qui prennent pleinement en charge le noyau .net sont AutoFac et maintenant nity également. Il est très simple d'ajouter cela. La seule chose que vous devez faire pour remplacer la DI intégrée est la suivante. Cet exemple est pour AutoFac mais son presque identique pour Unity il ressemble.

Tout d'abord, remplacez le vide sur ConfigureServices dans startup.cs par un IServiceProvider (dépendance d'AutoFac) comme ceci:

public IServiceProvider ConfigureServices(IServiceCollection services)

Créez ensuite un générateur de conteneurs, générez et résolvez un IServiceProvider à partir de ConfigureServices:

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

J'ai un wrapper autour de cette deuxième partie qui vous permet de charger et de créer dynamiquement différentes configurations à l'aide de modules AutoFac, que je pourrais être convaincu de télécharger sur GitHub ou quelque chose s'il y a un intérêt.

15
Brandon

Ninject ne prend pas en charge .Net Core, au lieu de cela, nous pouvons utiliser l'injection de dépendances de .net core. Voici les étapes à mettre en œuvre.

  1. Accédez à startup.cs à public void ConfigureServices(IServiceCollection services)
  2. Ajouter services.AddTransient<Interface, Class>();
  3. Accédez au contrôleur sur lequel vous souhaitez appliquer l'injection de dépendance.
  4. Créer un global private Interface _propertyName;
  5. Passez la variable de type d'interface au constructeur comme
 public Constructor(Interface name)
 {
     _propertyName= name;
 }
  1. Vous pouvez maintenant accéder aux membres de la classe via _propertyName.
1
Salman Lone