由於我是依賴項和IoC的新手,我有一個疑問。如何使用SimpleInjector在嵌套方法中獲取DbContext
我有一個領域層(具有業務邏輯)和一個數據層。我們不實施知識庫,我們直接使用EF Core。 它是一個類庫項目,我們在一個AspNetCore web api,WinForms和另一個框架中使用它。
這個想法是在一個範圍內使用相同的上下文。
問題是,我無法在嵌套方法執行中獲得相同的上下文,我相信這是因爲我完全不理解這個概念,你們能幫我一下嗎?
例子:
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;
}
}
感謝您分享您的知識。 – Lucas
感謝您分享您的知識。 我還有很多東西需要學習,你認爲這是我的最佳選擇?我對錶示層的訪問有限,我們在業務層和數據層下工作,需要在執行一些業務規則時共享相同的上下文。所有項目都是類庫。 我怎麼能不從我的業務邏輯調用GetInstance並事先構建圖形? – Lucas
@Lucus:你不會調用'GetInstance'。您在應用程序的啓動路徑中註冊所有對象(組合根)。並且所有實例都是使用構造函數注入接收的。你建立深刻的物體grapns。 – Steven