Bro*_*ato 5 c# dependency-injection asp.net-core
我关注了一篇博客文章“使用 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)UseInMemoryDatabase上DbContext
(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:我知道关于这个问题还有其他问题,但我没有阅读明确的答复。