相关疑难解决方法(0)

无法使用单例 yyy 中的作用域服务 xxx

我关注了一篇博客文章“使用 ASP.NET Core 和 Visual Studio Code 构建您的第一个 Web API”。

http://www.codingflow.net/building-your-first-web-api-with-asp-net-core-and-visual-studio-code/

在这种情况下,数据不会保存在数据库中,而是保存在内存中,如下所示:

services.AddDbContext<TodoContext>(options => options.UseInMemoryDatabase());
services.AddSingleton<ITodoRepository, TodoRepository>();
Run Code Online (Sandbox Code Playgroud)

你会注意到:

(1)UseInMemoryDatabaseDbContext

(2)AddSingleton关于TodoRepository

这效果非常好。现在我更新了代码以将数据保存在真实的数据库中。所以主要的变化是:

services.AddDbContext<TodoContext> (options => options.UseSqlite("Data Source=blogging.db"));            
services.AddSingleton<ITodoRepository, TodoRepository>();
Run Code Online (Sandbox Code Playgroud)

我想通知您,我必须AspNetCore从 1.0 迁移到 2.2。

现在在运行时,当瞄准控制器时,我收到错误:无法使用单例“Models.ITodoRepository”中的作用域服务“Models.TodoContext”。

我理解在这种情况下:

  • MyTodoContext是一个 Scoped 对象:在一个请求中是相同的,但在不同的请求中是不同的。

  • MyTodoRepository是一个 Singleton 对象:对于每个对象和每个请求都是相同的。

所以我最后改成了AddSingleton效果AddScoped很好的:

services.AddDbContext<TodoContext> (options => options.UseSqlite("Data Source=blogging.db"));            
services.AddScoped<ITodoRepository, TodoRepository>();
Run Code Online (Sandbox Code Playgroud)

我的问题是:知道这是否是一种可以接受的方法?

PS:我知道关于这个问题还有其他问题,但我没有阅读明确的答复。

c# dependency-injection asp.net-core

5
推荐指数
1
解决办法
9728
查看次数

标签 统计

asp.net-core ×1

c# ×1

dependency-injection ×1