Utilisation de Ninject pour MVC avec DbContext
Ninject est un framework d'injection de dépendances populaire pour .NET. Il vous permet de gérer la création et la durée de vie des objets de votre application.
Assurer le nettoyage de DbContext
Comme vous l'avez mentionné, votre DbContext est créé et injecté dans vos contrôleurs par Ninject . Par défaut, Ninject supprime les objets jetables (tels que DbContext) dès que l'objet de portée auquel ils sont liés est collecté par le ramasse-miettes. Cela signifie que vous n'avez pas besoin d'appeler explicitement Dispose sur votre DbContext.
Éviter les arguments DbContext répétés
Si vous disposez d'un contrôleur de base qui gère l'initialisation commune et accepte un DbContext argument, vous pouvez éviter d'ajouter cet argument à chaque contrôleur en utilisant l'extension de portée InParentScope(). Cela supprimera le DbContext dès que l'objet dans lequel il est injecté sera récupéré.
public class BaseController : Controller { protected DbContext MyDbContext; public BaseController() { MyDbContext = _context; } }
Optimisation de la création de DbContext
Par défaut, Ninject créera le DbContext pendant la construction du contrôleur, même si cela n'est pas nécessaire. Pour optimiser ce comportement, vous pouvez créer votre propre étendue qui crée uniquement le DbContext s'il est réellement requis. Voici un exemple :
public class RequestScoped : Ninject.Activation.Scope { protected override object Activate(IContext context, object instance) { bool disposeAfterUse = (instance is Disposable); var result = context.Kernel.Components .Get<MyDbContextFactory>() .CreateContext(); return disposeAfterUse ? new DisposedWhenRequestEnds(result) : result; } }
Cette portée peut être utilisée comme ceci :
kernel.Bind<MyDbContext>() .To<MyDbContext>() .InScope(new RequestScoped());
Désormais, le DbContext ne sera créé que lorsqu'une requête l'exige.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!