使用SqlSugar ORM,基于blazor、依赖注入业务服务,在调用时会报告错误。SqlSugarService:
public static class SqlSugarService
{
private static readonly ILog log = LogManager.GetLogger(typeof(SqlSugarService));
public static void AddSqlSugarSevice(this IServiceCollection services)
{
if (services == null) throw new ArgumentNullException(nameof(services));
services.AddScoped<ISqlSugarClient>(o =>
{
var listConfig = new List<ConnectionConfig>();
listConfig.Add(new ConnectionConfig
{
DbType = DbType.SqlServer,
ConnectionString = "Server=.\\SQLEXPRESS;DataBase=Test;Uid=sa;Pwd=123456",
IsAutoCloseConnection = true,
InitKeyType = InitKeyType.Attribute
});
var dbContext = new SqlSugarClient(listConfig);
return dbContext;
});
}
}接口:
public interface IReportRepository
{
public DataTable GetTest(string sql);
}接口实现:
public class ReportRepository : IReportRepository
{
private ISqlSugarClient _dbBase;
public ReportRepository(ISqlSugarClient sqlSugar)
{
_dbBase = sqlSugar;
}
public DataTable GetTest(string sql)
{
return _dbBase.Ado.GetDataTable(sql);
}
}注射:
services.AddSqlSugarSevice();
services.TryAddTransient<IReportRepository, ReportRepository>(); 使用构造函数注入:
private readonly IReportRepository _reportRepository;
//[Inject]
//public IReportRepository ReportService { get; set; }
public Report(IReportRepository reportRepository)
{
_reportRepository = reportRepository;
_reportRepository.GetTest("select * from test");
}错误:
处理请求时发生了未处理的异常。MissingMethodException:没有为“MyReport.Pages.Report”类型定义无参数构造函数。System.RuntimeType.CreateInstanceDefaultCtorSlow(bool publicOnly,bool wrapExceptions,bool fillCache)

公共部分类报告{私有只读IReportRepository _reportRepository;//Inject //public IReportRepository ReportService { get;set;} public Report() {}公共报告(IReportRepository reportRepository) { _reportRepository = reportRepository;_reportRepository.GetTest(“从测试中选择*”);}}

发布于 2021-05-11 10:36:27
在Razor (组件)中,您必须使用属性注入,而不是构造器注入。这意味着注入的服务在构造函数中不可用。这就是为什么我们有OnInitialized()。
我修正了我所能看到的,删除了注释的部分:
public partial class Report
{
//private readonly IReportRepository _reportRepository;
[Inject]
public IReportRepository ReportService { get; set; }
//public Report()
//{
//}
//public Report(IReportRepository reportRepository)
//{
// _reportRepository = reportRepository;
// _reportRepository.GetTest("select * from test");
//}
protected override OnItializedAsync()
{
// replace with async version if possible
// and assign to something?
ReportService.GetTest("select * from test");
}
}https://stackoverflow.com/questions/67482614
复制相似问题