Poo*_*ghy 3 .net c# dbcontext .net-core
我的项目是 .net core 2 base,我在 startup.cs 文件中设置了上下文和存储库
services.AddDbContext<DocumentContext>(options => options.UseSqlServer(connection));
services.AddSingleton<IAuthRepository, AuthRepository>();
Run Code Online (Sandbox Code Playgroud)
IAuthRepository 文件:
public interface IAuthRepository
{
int Login(LoginRequest model);
int Register(RegisterRequest model);
}
Run Code Online (Sandbox Code Playgroud)
AuthRepository 文件:
private readonly DocumentContext db;
public AuthRepository(DocumentContext context)
{
this.db = context;
}
...
Run Code Online (Sandbox Code Playgroud)
控制器:
private IAuthRepository AuthMethod { get; set; }
public AuthController(IAuthRepository authMethod)
{
this.AuthMethod = authMethod;
}
Run Code Online (Sandbox Code Playgroud)
我收到这个错误
InvalidOperationException:无法使用来自单例“...IAuthRepository”的范围服务“...DocumentContext”。
嗯,这在 asp.net core 中很常见,在dotnetcoretutorials 中有一篇关于它的完整文章:
...因为它实际上是 ASP.net Core 的服务 DI 试图确保您不会绊倒自己。虽然它不是万无一失(他们仍然给你足够的绳子让你上吊),但它实际上是在试图阻止你犯经典的 DI 范围错误。
最后的结论很简单:因为 ChildService 是有作用域的,而 FatherService 是单例的,它不会允许我们运行:
...是瞬态是“每次请求此服务时,创建一个新实例”,所以从技术上讲,这是正确的行为(即使它可能会导致问题)。而 ASP.net Core 中的“作用域”实例是“每个页面请求的一个新实例”,当父对象为单例时无法实现。
| 归档时间: |
|
| 查看次数: |
5427 次 |
| 最近记录: |