【发布时间】:2018-12-12 07:20:37
【问题描述】:
编辑:由于许多用户错误地将其视为 ASP.NET 特定问题。请注意,我的应用程序不是 Web 应用程序,并且我没有使用 ASP.NET 应用程序(我正在使用它的功能,它在 .NET Core 中也可用)。
最近,在 Ninject DI 中配置 Entity Framework DbContext 生命周期时,我一直在研究 .NET Core 依赖注入,因为它已经具有注册 DbContext 的功能,可以在 here 找到。默认上下文生命周期为ServiceLifetime.Scoped。
在代码预览中,我们可以读到在 ASP.NET 应用程序中,“作用域”意味着:
范围是围绕每个服务器请求创建的
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 中实现类似的功能,但在谈到 .NET Core 应用程序(这不是 Web应用程序!)。
Ninject 有 InRequestScope 方法,但它仅适用于 Web 应用程序,因此它与 .NET Core DI ServiceLifetime.Scoped 设置确实不同。
也许我必须创建某种 custom scope in Ninject,但我仍然无法说明如何实现与 .NET Core DI 中完全相同的作用域行为。为此,我需要了解作用域生命周期在 .NET Core DI 中的 .NET Core 应用程序上下文中是如何工作的。我的猜测是,一旦应用程序退出,就会创建一个 DbContext 实例并被释放。
因此我的问题:
- .NET Core DI
scope生命周期设置如何工作?它的生命周期是什么? - 是否可以在 Ninject DI 中实现类似的行为?
【问题讨论】:
-
@tura08 请再次阅读我的问题。
-
This repository 包含如何使用作用域将 Ninject 集成到 ASP.NET Core 中的示例。
-
@Steven 对不起。我清楚地说,至少两次这不是针对 Web 应用程序的,这是关于为 .NET Core 应用程序移植 Ninject 的
InRequestScope,就像 .NET Core DI 正在做的那样。我已经编辑了这个问题,所以现在会更清楚:) -
嗨,Rusco,该存储库仍然为您提供了一些有关如何执行此操作的线索。
标签: c# entity-framework dependency-injection .net-core ninject