【发布时间】:2022-09-29 19:49:55
【问题描述】:
我有UserRepository,我通过ASP.NET Core 依赖注入机制将DbContext 注入其中,并得到以下异常。
无法从单例 \'DAL.Abstract.IUserRepository\' 使用范围服务 \'DAL.SocialMediaAppDbContext\'。)(验证服务描述符 \'ServiceType: DAL.Abstract.IUserRepository Lifetime: Singleton ImplementationType: DAL.Concrete.UserRepository 时出错\': 不能从单例 \'DAL.Abstract.IUserRepository\' 使用范围服务 \'DAL.SocialMediaAppDbContext\'。)\'
总的来说,我理解这个问题,我必须使 DbContext 单例或 userRepository 范围。但是什么是正确的配置?我应该做 DbContext单身人士?或者我的用户存储库范围?我猜 userRepository 应该保持单例,因为没有必要为每个请求创建 repo 实例,但是如何正确解决这个问题?我的项目是基于 .NET 6 的 WEB API。我想听听一些整体的建议。
这是代码
services.AddSingleton<IUserRepository, UserRepository>();
services.AddDbContext<SocialMediaAppDbContext>(options =>
{
options.UseSqlServer(_config.GetConnectionString(DBCommon.ConnectionString));
});
public class UserRepository : IUserRepository
{
private readonly SocialMediaAppDbContext _context;
public UserRepository(SocialMediaAppDbContext context)
{
_context = context;
}
}
-
永远,永远,永远让 DbContext 成为单例!
-
好的,所以让 UserRepo 限定范围?
-
是的,这会奏效。
标签: c# asp.net-core dependency-injection repository-pattern