.blazor dependency injection error: An unhandled exception occurred while processing the request.?

.blazor dependency injection error: An unhandled exception occurred while processing the request.?

使用SqlSugar ORM,基于blazor,依赖注入业务服务,调用时报错。 SqlSugar服务:

 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");
        }

错误:

An unhandled exception occurred while processing the request. MissingMethodException: No parameterless constructor defined for type 'MyReport.Pages.Report'. System.RuntimeType.CreateInstanceDefaultCtorSlow(bool publicOnly, bool wrapExceptions, bool fillCache)

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");
    }


}

在 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");                 
    }

}