Heim >Backend-Entwicklung >C++ >Wie verwaltet Ninject die DbContext-Lebensdauer und die Abhängigkeitsinjektion?

Wie verwaltet Ninject die DbContext-Lebensdauer und die Abhängigkeitsinjektion?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-25 12:30:12625Durchsuche

How Does Ninject Manage DbContext Lifetime and Dependency Injection?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn