Редактировать: из-за того, что многие пользователи ошибочно воспринимают это как специфический вопрос ASP.NET. Обратите внимание, что мое приложение не является веб-приложением, и я не использую приложение ASP.NET (я использую его функциональность, которая также доступна в .NET Core).
В последнее время при настройке времени жизни Entity Framework DbContext в Ninject DI я копался в .NET Core Dependency Injection, потому что он уже имеет функциональность для регистрации DbContext и может быть найден здесь . Время жизни контекста по умолчанию: ServiceLifetime.Scoped
.
В коде мы можем прочитать, что в приложениях ASP.NET «scoped» означает:
область создается вокруг каждого запроса к серверу
namespace Microsoft.Extensions.DependencyInjection
{
//
// Summary:
// Specifies the lifetime of a service in an Microsoft.Extensions.DependencyInjection.IServiceCollection.
public enum ServiceLifetime
{
//
// Summary:
// Specifies that a single instance of the service will be created.
Singleton = 0,
//
// Summary:
// Specifies that a new instance of the service will be created for each scope.
//
// Remarks:
// In ASP.NET Core applications a scope is created around each server request.
Scoped = 1,
//
// Summary:
// Specifies that a new instance of the service will be created every time it is
// requested.
Transient = 2
}
}
Я пытаюсь добиться аналогичной функциональности в Ninject DI, но очень сложно сказать, что было бы эквивалентно времени жизни в Ninject, когда я говорю о приложении .NET Core (, которое не является веб-интерфейсом). приложение! ).
Ninject имеет этот метод InRequestScope , однако он доступен только для веб-приложений, поэтому он действительно отличается от настройки .NET Core DI ServiceLifetime.Scoped
.
Возможно, мне пришлось бы создать какую-то настраиваемую область в Ninject , но все же - я не совсем могу сказать, как добиться точно такого же поведения в области, как в .NET Core диатомовый Для этого мне нужно знать, как работает жизненный цикл в контексте приложения .NET Core в .NET Core DI. Я предполагаю, что существует один экземпляр создаваемого DbContext, который удаляется после завершения работы приложения.
Отсюда и мои вопросы :
- Как работает настройка продолжительности жизни .NET Core DI
scope
и каков ее жизненный цикл?
- Можно ли добиться аналогичного поведения в Ninject DI?