c# - 验证服务描述符时出错
问题描述
我正在尝试创建一个演示来展示 DapperExtensions 的好处。我被困在一个点上。在启动项目时,我收到有关服务类型的错误。错误 :
“某些服务无法构建(验证服务描述符时出错'ServiceType: ImOnTech.Teftis.DAL.Interfaces.DT_Inspection.ICityRepository Lifetime: Transient ImplementationType: ImOnTech.Teftis.DAL.Repositories.DT_Inspection.CityRepository': 无法在尝试激活“ImOnTech.Teftis.DAL.Repositories.DT_Inspection.CityRepository”时解析“ImOnTech.Teftis.DAL.Dapper.IDbContext”类型的服务。)(验证服务描述符“ServiceType:ImOnTech.Teftis.DAL”时出错。 IUnitOfWork 生命周期:瞬态实施类型:ImOnTech.Teftis.DAL.UnitOfWork':尝试激活“ImOnTech.Teftis.DAL.Repositories.DT_Inspection.CityRepository”时无法解析“ImOnTech.Teftis.DAL.Dapper.IDbContext”类型的服务。 )'"
DapperContext.cs
namespace ImOnTech.Teftis.DAL.Dapper
{
public class DapperContext : IDbContext
{
private readonly string _connectionString;
private IDbConnection _connection;
private readonly IConfiguration configuration;
public DapperContext(IConfiguration _configuration)
{
configuration = _configuration;
_connectionString = configuration.GetConnectionString("DefaultConnection");
}
public void Dispose()
{
if (_connection != null && _connection.State == ConnectionState.Open)
_connection.Close();
}
public IDbConnection Connection
{
get
{
if (_connection == null)
{
_connection = new SqlConnection(_connectionString);
}
if (_connection.State != ConnectionState.Open) _connection.Open();
return _connection;
}
}
}
}
这是 CityRepository
public class CityRepository : ICityRepository
{
public IDbContext Context { get; }
public CityRepository(IDbContext context)
{
Context = context;
}
public async Task<IReadOnlyList<City>> GetAllAsync()
{
var CityList = await Context.Connection.GetListAsync<City>();
Context.Connection.Close();
return CityList.ToList();
// var sql = "SELECT * FROM [DT_Inspection].City";
//using (var connection = new SqlConnection(configuration.GetConnectionString("DefaultConnection")))
//{
// connection.Open();
// var result = await connection.QueryAsync<City>(sql);
// return result.ToList();
//}
}
最后,CityController
public class CityController : ControllerBase
{
private readonly IUnitOfWork unitOfWork;
private readonly ILogger<CityController> _logger;
public CityController(ILogger<CityController> logger, IUnitOfWork unitOfWork)
{
_logger = logger;
this.unitOfWork = unitOfWork;
}
[HttpGet]
public async Task<IActionResult> GetAll()
{
var data = await unitOfWork.Cities.GetAllAsync();
return Ok(data);
}
}
PS:
services.AddTransient<ICityRepository, CityRepository>();
services.AddTransient<IUnitOfWork, UnitOfWork>();
我已经将它们添加到 startup.cs 但没有用。
解决方案
添加
services.AddTransient<IDbContext, DapperContext>();
解决了这个问题。
推荐阅读
- axios - 无法从 json-server 访问 X-Total-Count 标头
- angular - route.queryParams.subscribe 在 Angular Typescript 组件中返回 undefined
- python - Python中的聚合和排序
- react-native - 在 npm 安装 react-native 项目期间出现问题
- php - 如何在 Alpine Linux 容器上安装 ZeroMQ for PHP?
- python - 模块“火炬”在 Visual Studio 代码中没有“空”成员错误
- svg - 使用 D3.js 强制时如何防止气泡接触 svg 框架/边框?
- python - Python 以数字方式列出文件
- reactjs - 在反应中更新状态更新的表单组件不会重新渲染
- mongodb - Mongoose distinct 返回空数组