首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.blazor依赖注入错误:在处理请求时发生了未处理的异常。?

.blazor依赖注入错误:在处理请求时发生了未处理的异常。?
EN

Stack Overflow用户
提问于 2021-05-11 07:54:27
回答 1查看 631关注 0票数 2

使用SqlSugar ORM,基于blazor、依赖注入业务服务,在调用时会报告错误。SqlSugarService:

代码语言:javascript
复制
 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;
               
            });

        }

    }

接口:

代码语言:javascript
复制
  public interface IReportRepository
    {
          public DataTable GetTest(string sql);
    }

接口实现:

代码语言:javascript
复制
 public class ReportRepository : IReportRepository
    {
        private ISqlSugarClient _dbBase;
        public ReportRepository(ISqlSugarClient sqlSugar)
        {
             _dbBase = sqlSugar;
         }
    
        
        public DataTable GetTest(string sql)
        {
          return _dbBase.Ado.GetDataTable(sql);
        }

}

注射:

代码语言:javascript
复制
  services.AddSqlSugarSevice();
  services.TryAddTransient<IReportRepository, ReportRepository>(); 

使用构造函数注入:

代码语言:javascript
复制
   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(“从测试中选择*”);}}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-11 10:36:27

在Razor (组件)中,您必须使用属性注入,而不是构造器注入。这意味着注入的服务在构造函数中不可用。这就是为什么我们有OnInitialized()。

我修正了我所能看到的,删除了注释的部分:

代码语言:javascript
复制
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");                 
    }

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67482614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档