У меня есть сомнения, так как я новичок в зависимости и IoC.Как получить DbContext во вложенных методах с помощью SimpleInjector
У меня есть доменный уровень (с бизнес-логикой) и слой данных. Мы не реализуем репозитории, мы напрямую используем EF Core. Это проект библиотеки классов, мы используем его в веб-приложениях ASP.NET, 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