Je me demande comment exactement Ninject gère EF injection DbContext est le scénario suivant.La dépendance injectée DbContext est-elle partagée entre toutes les classes qui l'utilisent dans une instance de requête donnée?
Il y a une classe utilitaire qui prend DbContext comme argument et fait un travail qui exige dbContext:
public class SomeClass : ISomeClass
{
public SomeClass(MyDbContext context)
{
//the context is dependency injected
}
}
Il y a un contrôleur API qui prend DbContext ainsi que d'une instance injectée de ISomeClass (qui nécessite également DbContext)
public class SomeController
{
public SomeController(MyDbContext context, ISomeClass someClass)
{
//this controller uses db context for some simple actions and someclass for some more complex actions
}
}
option de reliure définie sur:
kernel.Bind<MyDbContext>().ToSelf().InRequestScope();
Maintenant, les questions sont
Lorsque SomeController est instancié, l'instance de SomeClass partage-t-elle la même instance de MyDbContext? En outre, si SomeClass avait injecté SomeSubClass et que MyDbContext était injecté dans le constructeur, serait-ce la même instance de contexte?
Est-ce que ça marche comme ça:
Une demande HTTP est et nécessite contrôleur la création et ses dépendances qui nécessitent DbContext, autant que nous sommes prêts à
InRequestScope
, permet de retourner la même instance pour les gouverner tout?
Si oui, alors il n'y a pas de différence (DbContext sage) entre un constructeur de contrôleur qui prend le contexte et crée des classes UnitOfWork (pattern from here) comme
public class SomeController(MyDbContext context)
{
this.someUnitOfWork = new SomeUnitOfWork(context);
}
et qui prend l'unité de travail comme paramètre injecté
public class SomeController(MyDbContext context, ISomeUnitOfWork someUnit){}
Et ici, la seule différence serait le couplage serré pour la mise en œuvre SomeUnitOfWork?
Réponse courte: Basé sur la liaison de InRequestScope, YES – Nkosi