Heim >Backend-Entwicklung >C++ >Wie verwaltet Ninject die DbContext-Lebensdauer und die Abhängigkeitsinjektion?
Ninject: Umgang mit Objektlebensdauer und Abhängigkeitsinjektion
Frage 1: DbContext-Bereinigung
Wann Mit Ninject müssen Sie sich keine Gedanken über die manuelle Entsorgung von DbContext-Instanzen machen. Ninject entsorgt automatisch alle verfügbaren Objekte, die nicht an InTransientScope() gebunden sind. Da Sie höchstwahrscheinlich InParentScope() oder andere Bereiche verwenden, übernimmt Ninject die Entsorgung, wenn der entsprechende Bereich vom Garbage Collector erfasst wird.
Frage 2: Vermeiden von injiziertem DbContext im Basiscontroller
Es wird generell empfohlen, die Verwendung von Basisklassen für MVC-Controller zu vermeiden. Sie neigen dazu, das Prinzip der Einzelverantwortung zu verletzen und zu göttlichen Objekten zu führen. Erwägen Sie stattdessen die Verwendung global registrierter Filter, um übergreifende Anliegen zu behandeln.
Beispiel:
Angenommen, Sie möchten allgemeine ViewBag-Eigenschaften basierend auf dem aktuellen Benutzer festlegen. Sie könnten einen IAuthorizationFilter wie folgt erstellen:
public class CurrentUserProfileFilter : IAuthorizationFilter { private readonly MyDbContext context; public CurrentUserProfileFilter(MyDbContext context) { this.context = context; } public void OnAuthorization(AuthorizationContext filterContext) { // Set ViewBag properties based on current user information from DbContext } }
Dann registrieren Sie den Filter global in Ihrer FilterConfig:
public class FilterConfig { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { FilterProviders.Providers.Insert(0, new GlobalFilterProvider(DependencyResolver.Current)); } }
Dadurch werden die ViewBag-Eigenschaften bei jeder Anfrage automatisch festgelegt, ohne dass Sie dies tun müssen Fügen Sie MyDbContext in Ihre Controller ein.
Frage 3: Lazy DB Context Instanziierung
Standardmäßig erstellt Ninject Objekte eifrig, es ist jedoch möglich, ein von Ninject gebundenes Objekt lazy zu machen (wird nur erstellt, wenn es zum ersten Mal angefordert wird).
Dies wird jedoch nicht empfohlen Da es einen erheblichen Initialisierungsaufwand hat, wäre es sinnlos, die Erstellung von DbContext aufzuschieben. Außerdem sollte ein DbContext entsorgt werden, wenn er fertig ist, und seine Lebensdauer sollte entsprechend gesteuert werden.
Das obige ist der detaillierte Inhalt vonWie verwaltet Ninject die DbContext-Lebensdauer und die Abhängigkeitsinjektion?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!