Ich habe Zweifel, da ich neu in der Abhängigkeit und IoC bin.Wie bekomme ich DbContext in verschachtelten Methoden mit SimpleInjector
Ich habe eine Domain-Schicht (mit Geschäftslogik) und eine Datenschicht. Wir implementieren keine Repositories, wir verwenden EF Core direkt. Es ist ein Klassenbibliothek Projekt, wir verwenden es in einer AspNetCore Web API, WinForms und in einem anderen Framework.
Die Idee ist, den gleichen Kontext innerhalb eines Bereichs zu verwenden.
Das Problem ist, dass ich nicht in der Lage bin, den gleichen Kontext in der geschachtelten Methodenausführung zu bekommen. Ich bin mir sicher, weil ich das Konzept nicht vollständig verstanden habe. Kannst du mir dabei helfen?
Beispiel:
public class MyTest
{
public void TestContainer()
{
var parentContext = MyContainer.Container.GetInstance<MyContext>();
TestParentAndChildContext(parentContext);
}
private void TestParentAndChildContext(MyContext parentContext)
{
var childContext = MyContainer.Container.GetInstance<MyContext>();
Assert.AreEqual(parentContext, childContext);
}
}
public class MyContainer
{
public static Container Container
{
get { return container ?? (container = RegisterAndVerifyContainer()); }
}
private static Container RegisterAndVerifyContainer()
{
var container = new Container();
container.Options.DefaultScopedLifestyle = new ExecutionContextScopeLifestyle();
container.Register<DbContext, MyContext>(Lifestyle.Scoped);
container.Verify();
return container;
}
}
Vielen Dank für Ihr Wissen zu teilen. – Lucas
Vielen Dank für Ihr Wissen. Ich habe noch viel zu lernen, was würdest du sagen, es ist die beste Option in meinem Fall? Ich habe beschränkten Zugriff auf die Präsentationsschicht, wir arbeiten unter der Business-Schicht und der Datenschicht und müssen denselben Kontext teilen, während wir einige Geschäftsregeln ausführen. Alle Projekte sind Klassenbibliotheken. Wie könnte ich GetInstance nicht von meiner Geschäftslogik aus aufrufen und die Graphen vorher aufbauen? – Lucas
@Lucus: Sie rufen 'GetInstance' nicht auf. Sie registrieren alle Objekte im Startpfad der Anwendung (Composition Root). Und alle Instanzen werden mithilfe der Konstruktorinjektion empfangen. Sie bauen tiefe Objektgrappen. – Steven