Ninject für MVC mit DbContext verwenden
Ninject ist ein beliebtes Dependency-Injection-Framework für .NET. Damit können Sie die Erstellung und Lebensdauer der Objekte Ihrer Anwendung verwalten.
Sicherstellung der DbContext-Bereinigung
Wie Sie bereits erwähnt haben, wird Ihr DbContext von Ninject erstellt und in Ihre Controller eingefügt . Standardmäßig entsorgt Ninject Einwegobjekte (z. B. DbContext), sobald das Bereichsobjekt, an das sie gebunden sind, vom Garbage Collector erfasst wird. Dies bedeutet, dass Sie Dispose nicht explizit für Ihren DbContext aufrufen müssen.
Wiederholte DbContext-Argumente vermeiden
Wenn Sie einen Basiscontroller haben, der die allgemeine Initialisierung übernimmt und einen DbContext akzeptiert Argument können Sie vermeiden, dieses Argument zu jedem Controller hinzuzufügen, indem Sie die Bereichserweiterung InParentScope() verwenden. Dadurch wird der DbContext entsorgt, sobald das Objekt, in das er injiziert wird, im Müll gesammelt wird.
public class BaseController : Controller { protected DbContext MyDbContext; public BaseController() { MyDbContext = _context; } }
Optimierung der DbContext-Erstellung
Standardmäßig erstellt Ninject das DbContext während der Controller-Erstellung, auch wenn es nicht benötigt wird. Um dieses Verhalten zu optimieren, können Sie einen eigenen Bereich erstellen, der den DbContext nur dann erstellt, wenn er tatsächlich benötigt wird. Hier ist ein Beispiel:
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; } }
Dieser Bereich kann folgendermaßen verwendet werden:
kernel.Bind<MyDbContext>() .To<MyDbContext>() .InScope(new RequestScoped());
Jetzt wird der DbContext nur dann erstellt, wenn eine Anfrage dies erfordert.
Das obige ist der detaillierte Inhalt vonWie kann Ninject das DbContext-Management in MVC-Anwendungen optimieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!