Dependency injection 如何更好地在.NETCore中注册服务依赖项注入

Dependency injection 如何更好地在.NETCore中注册服务依赖项注入,dependency-injection,.net-core,asp.net-core-2.0,Dependency Injection,.net Core,Asp.net Core 2.0,我试图理解依赖注入服务注册表是如何工作的。我有一个通用存储库,它对任何表(如GetAll()、GetById())执行数据库操作。。。 和另一个将提交到数据库的服务。如Save();提交() 我读过 我的问题是,注册通用存储库服务和数据库服务的最佳选项是什么?为什么 services.AddScoped (typeof (IRepository<>), typeof (Repository<>)); services.AddTransient (typeof (IRep

我试图理解依赖注入服务注册表是如何工作的。我有一个通用存储库,它对任何表(如GetAll()、GetById())执行数据库操作。。。 和另一个将提交到数据库的服务。如Save();提交()

我读过

我的问题是,注册通用存储库服务和数据库服务的最佳选项是什么?为什么

services.AddScoped (typeof (IRepository<>), typeof (Repository<>));
services.AddTransient (typeof (IRepository<>), typeof (Repository<>));
services.AddSingleton (typeof (IRepository<>), typeof (Repository<>));
services.addScope(typeof(IRepository)、typeof(Repository));
services.AddTransient(typeof(IRepository)、typeof(Repository));
services.AddSingleton(typeof(IRepository)、typeof(Repository));

使用
AddScoped
。作用域服务是按作用域创建的。在web应用程序中,每个web请求都会创建一个新的独立服务范围。这意味着作用域服务通常是根据web请求创建的

如果在同一请求中多次调用db,那么使用作用域生存期将有助于将同一存储库对象保留在内存中,并在同一Http请求上下文中多次重用该对象。如果使用transient,它将多次创建新的存储库对象并消耗更多内存