最近,在Ninject DI中配置实体框架DbContext生存期时,我一直在挖掘.NET核心依赖项注入,因为它已经具有注册DbContext的功能,可以在这里找到。默认上下文生存时间为ServiceLifeTime.scoped
。
在代码peek中,我们可以读到在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
}
}
作用域
生命周期设置是如何工作的,它的生命周期是什么?NET核心DI作用域生命周期设置是如何工作的,它的生命周期是什么?
.NET核心在内部使用名为serviceScope
的类。当调用新的请求(例如web请求)时,将创建新的实例,其中包括新的服务提供者。在请求期间,此服务提供程序用于依赖关系解析。请求完成后,作用域将被处置,作用域的服务提供者也将被处置,作用域的服务提供者也将被处置。
internal class ServiceScope : IServiceScope, IDisposable
{
private readonly Microsoft.Extensions.DependencyInjection.ServiceProvider _scopedProvider;
public ServiceScope(Microsoft.Extensions.DependencyInjection.ServiceProvider scopedProvider)
{
this._scopedProvider = scopedProvider;
}
public IServiceProvider ServiceProvider
{
get
{
return (IServiceProvider) this._scopedProvider;
}
}
public void Dispose()
{
this._scopedProvider.Dispose();
}
}
是否可能在Ninject DI中实现类似的行为?
正如您已经注意到的那样,实现自定义作用域是一条必经之路。您可以在另一个答案中查看如何执行此操作:
Ninject-当RequestScope没有意义时,应该在什么范围中绑定DbContext?
编辑:
我想知道,当我们为客户提供新的更新时,是否有丢失这些文件的风险。如果有更好的解决方案,上传文件和获取文件链接之后,与.NET core请告诉我:)
.NET核心和ASP.NET核心到底有什么区别?
为什么通过或请求服务被认为是不良做法。我可以到处阅读这条语句: 建议使用构造函数注入,而不是使用RequestServices获取它。 我的想法正好相反。尽可能使用Request estServices。让我解释一下为什么。我想让控制器尽可能小,这样我就可以创建单独的服务。这样,我的控制器就干净了: 所有服务都继承自base,其中包含用于管理权限、缓存sql请求的逻辑…… 使用构造函数方法,我得到
从sln目录工程 从解决方案目录工作 我不希望VS 2017必须安装在构建机器上,所以我从 https://www.visualstudio.com/downloads/ 安装了“Visual Studio 2017的构建工具”。 轰炸sln中的每个项目,错误如下: 错误 MSB4019:找不到导入的项目“C:\Program Files (x86)\Microsoft Visual Studio
我读过关于.NET标准和.NET核心之间的区别,但我真的不知道区别是什么,也不知道什么时候选择.NET标准库项目,什么时候选择.NET核心库项目。
我刚起步 (更新:解决方案是将UseRouting移动到/api/error路由下) 但是当时,永远不会调用错误控制器方法。