我将项目的数据访问部分移动到WebAPI并使用Entity Framework Core来执行EF所做的工作。
我知道首选模式现在依赖于依赖注入来创建dbContext,当控制器"用来。 "你好,世界!"教程显示了通过以下方式访问上下文的示例:
private BloggingContext _context;
public BlogsController(BloggingContext context)
{
_context = context;
}
我遇到的问题是我需要进行一层......因为我有一个"服务"暴露存储库方法的接口。
我尝试将上下文实例化放入我的存储库,但是,当然,当我尝试新建服务实例时,它需要传入上下文对象。我试图通过发送来解决它一个新的BloggingContext()作为上下文参数,但收到错误:No database provider has been configured for this DbContext.
当然,这是有道理的,因为我传入的new
个没有连接到与之相关的数据库。这个连接是在Startup.cs中定义的,正如我试图在这个转换过程中试图切断的各种教程中所描述的那样。
因此,在我的控制器中给出以下代码,我如何调用该服务并仍然让依赖注入执行它在存储库级别设计的内容?
[HttpGet("{bool}")]
public IActionResult GetRoleNames(bool? isActive)
{
var service = new SecurityService();
try
{
return Ok(service.GetRoleNames(isActive));
}
catch (Exception ex)
{
Log.Error("Failed to get list of role names from the API", ex.Message);
return BadRequest(ex);
}
}
我非常确定我[HttpGet("{bool}")]
有点FUBARd,因为GetRoleNames
将允许NULL,但我会在解决DI问题之后越过那个桥。