[英]AddSingleton doesn't work in my ASP.NET Core project
我有一个问题,我想将我的服务 CourseService 添加为 Singleton 并且我只想添加一次我的初始数据,如下所示:
context.Courses.Add(new Course { ... });
但事实证明,每次我上传带有课程的页面时,我的初始数据都会一次又一次地添加到我的数据库中。 因此,我在上传此页面的同时在我的页面上看到相同的课程。 无法理解问题出在哪里。
我的界面:
public interface ICourseService
{
IEnumerable<CourseDto> GetCourses();
Task<IEnumerable<CourseDto>> GetCoursesAsync();
}
我的服务:
public class CourseService : BaseService<Course, CourseDto>, ICourseService
{
public CourseService(IMapper mapper, DataContext context) : base(mapper,context)
{
context.Courses.Add(new Course { ... });
context.Courses.Add(new Course { ... });
context.SaveChanges();
}
public IEnumerable<CourseDto> GetCourses() { ... }
public async Task<IEnumerable<CourseDto>> GetCoursesAsync() { ... }
}
我的 controller:
public class CourseController : Controller
{
private readonly CourseService _courseService;
public CourseController(CourseService courseService)
{
_courseService = courseService;
}
[Route("courses")]
public async Task<IActionResult> GetCourses()
{
var courses = await _courseService.GetAllAsync();
return View("CourseList", courses);
}
}
我在 ConfigureServices 方法中将我的服务添加为 Singleton:
services.AddSingleton<ICourseService, CourseService>();
services.AddEntityFrameworkSqlite().AddDbContext<DataContext>();
AddDbContext
默认添加Scoped
生命周期的上下文,因此在 singleton 服务中无法解析。 可能的解决方法:
ICourseService
注册为作用域IServiceScopeFactory
并使用它来创建 scope 并从 scope 解析上下文(在每个方法调用上),就像在这个答案中一样我个人会使用第一种方法 go。
阅读更多:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.