我的项目以.net core 2为基础,我在startup.cs文件中设置了上下文和存储库
services.AddDbContext<DocumentContext>(options => options.UseSqlServer(connection));
services.AddSingleton<IAuthRepository, AuthRepository>();
IAuthRepository文件:
public interface IAuthRepository
{
int Login(LoginRequest model);
int Register(RegisterRequest model);
}
AuthRepository文件:
private readonly DocumentContext db;
public AuthRepository(DocumentContext context)
{
this.db = context;
}
...
控制器:
private IAuthRepository AuthMethod { get; set; }
public AuthController(IAuthRepository authMethod)
{
this.AuthMethod = authMethod;
}
我收到此错误
InvalidOperationException:无法使用单例“ ... IAuthRepository”中的作用域服务“ ... DocumentContext”。
答案 0 :(得分:1)
嗯,这在asp.net核心中很常见,dotnetcoretutorials中有完整的文章:
...因为它实际上是ASP.net的服务DI 核心尝试确保您不会绊倒自己。虽然不是 万无一失(他们仍然会给您足够的绳索来挂住自己), 实际上试图阻止您犯下经典的DI范围错误。
最后的结论很简单:因为ChildService是作用域,而父亲服务是单例,因此不允许我们运行:
...是瞬态,即“每次请求此服务时,请创建一个 新实例”,因此从技术上讲,这是正确的行为(即使 可能会引起问题)。而ASP.net中的“作用域”实例 核心是“每页请求一个新实例”,无法满足 当父母是单身时。