我试图了解依赖注入服务注册表的工作方式。我有一个通用存储库,可以对任何表(如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<>));
答案 0 :(得分:0)
使用AddScoped
。范围服务是按范围创建的。在Web应用程序中,每个Web请求都会创建一个新的单独的服务范围。这意味着通常会根据Web请求创建范围服务。
如果您在同一请求中多次调用db,则使用作用域生存期将有助于将同一存储库对象保留在内存中,并在同一Http Request上下文中多次重用该对象。如果使用暂态,它将多次创建一个新的存储库对象,并占用更多内存。