我正在使用ASP.NET Core 2.1构建Web API。我有用户可以通过HTTP请求访问的控制器。然后,控制器调用服务类。我试图将DbContext注入到自定义服务类中,但是每当这样做时,我都会从服务器获得响应500。在我的启动课程中,我有
services.AddDbContext<CatalogueContext>(options => options.UseSqlServer(_config.GetConnectionString("DefaultConnection")));
如果我将这样放在控制器类中,一切正常
private readonly ITrackServices _service;
private readonly CatalogueContext _dbContext;
public TrackController(ITrackServices service, CatalogueContext dbContext)
{
_service = service;
_dbContext = dbContext;
}
但是我不想将dbContext注入控制器。如果我从控制器中删除该注入并尝试在服务类中尝试相同的操作
private readonly CatalogueContext _dbContext;
public TrackService(CatalogueContext dbContext)
{
_dbContext = dbContext;
}
它不起作用。因此,当我尝试访问使用TrackService的端点时,都会从服务器获得500。
TrackService
被注册为单例:
services.AddSingleton<ITrackServices, TrackService>();
我不知道我在做什么错。我应该在TrackService上实现一些接口以启用依赖项注入吗?
答案 0 :(得分:1)
您还需要注册服务:
services.AddScoped<ITrackService, TrackService>();
是否使用瞬态,作用域或单例取决于服务依赖项的有效期。它不应该依赖寿命较短的服务。