Maximiser Ninject pour le développement d'applications MVC : optimisation et commodité
Gestion DbContext
Ninject garantit que votre DbContext est éliminé et nettoyé de manière appropriée. Comme indiqué dans la documentation de référence, le conteneur est chargé de supprimer les objets jetables, comme DbContext, lorsque leur portée associée est collectée par le garbage collector.
Points communs du contrôleur de base
Pour éviter d'avoir à ajouter manuellement des arguments DbContext à des contrôleurs individuels, envisagez plutôt d'utiliser des filtres globaux. Les filtres permettent de traiter des problématiques transversales sans recourir à l’héritage. Par exemple, si vous avez des propriétés ViewBag communes à définir en fonction de l'utilisateur actuel, vous pouvez créer un filtre comme celui-ci :
public class CurrentUserProfileFilter : IAuthorizationFilter { public void OnAuthorization(AuthorizationContext filterContext) { var currentUserName = filterContext.HttpContext.User.Identity.Name; // Set ViewBag properties... } }
En outre, enregistrez un fournisseur de filtres personnalisé pour résoudre les dépendances des filtres de manière individuelle. manière de requête :
public class GlobalFilterProvider : IFilterProvider { public IEnumerable<Filter> GetFilters(ControllerContext controllerContext, ActionDescriptor actionDescriptor) { foreach (var filter in dependencyResolver.GetServices<IActionFilter>()) { yield return new Filter(filter, FilterScope.Global, order: null); } // Similar loop for other filter types... } }
Cette approche élimine le besoin pour chaque contrôleur d'accepter DbContext comme argument.
Optimisation de la création de DbContext
Pour des raisons de performances, vous souhaiterez peut-être optimiser la création d'instances DbContext. Envisagez d'implémenter un DependencyProvider personnalisé pour Ninject qui vérifie si le DbContext est déjà créé pour la requête en cours. Sinon, créez le DbContext et stockez-le dans un sac de données HttpContext. Si elle existe, récupérez-la et utilisez l'instance existante.
Cette stratégie garantit qu'une instance DbContext n'est créée que lorsque la requête nécessite un accès à la base de données.
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!