如何更好地在.Net Core中注册服务依赖注入

时间:2019-09-25 00:39:54

标签: dependency-injection .net-core asp.net-core-2.0

我试图了解依赖注入服务注册表的工作方式。我有一个通用存储库,可以对任何表(如GetAll(),GetById())执行数据库操作。 另一个将提交给数据库的服务。如Save(); Commit();

我读过 AddTransient, AddScoped and AddSingleton Services Differences?

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

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

1 个答案:

答案 0 :(得分:0)

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

如果您在同一请求中多次调用db,则使用作用域生存期将有助于将同一存储库对象保留在内存中,并在同一Http Request上下文中多次重用该对象。如果使用暂态,它将多次创建一个新的存储库对象,并占用更多内存。