如何解决.Net 3 Worker服务中的依赖项注入和可访问性参数类型不一致?

问题描述

我正在设置.Net核心工作程序服务,该服务将从数据库中获取一些数据并将其传递给端点。因此,我试图根据我的.net MVC知识对其进行设置。设置时,出现此错误

未处理的异常。 System.ArgumentNullException:值不能为 空值。 (参数“ implementationInstance”)位于 Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddSingleton [TService](IServiceCollection 服务,TService实现实例

我创建了一个类,其中的逻辑用于从存储过程中获取数据。这是商务电话

namespace AgencyBankingSettlement.Business
{
    public class ServiceTask
    {
        private readonly AgencyBankingSettlementDbContext context;

        public ServiceTask(AgencyBankingSettlementDbContext _context)
        {
            context = _context;
        }
        public IEnumerable<Testing> Request() {
            var person = context.Testings.FromSqlRaw<Testing>("dbo.spPerson_GetAll");
            return person;
        }
    }
}

这是我的program.cs。在program.cs文件中,我设置了依赖项注入,以便可以轻松地将其注入我的类中。

        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureServices((hostContext,services) =>
                {
                    IConfiguration configuration = hostContext.Configuration;

                    AppSettings appSettings = configuration.GetSection("ContextCore").Get<AppSettings>();

                    services.AddSingleton(appSettings);
                    services.AddScoped<ServiceTask>();

                    services.AddDbContext<AgencyBankingSettlementDbContext>(options =>
                    options.UseSqlServer(hostContext.Configuration.GetConnectionString("DefaultConnection")));

                    services.AddHostedService<Worker>();
                });
    }

所以在我的worker.cs中。我希望能够访问ServiceTask文件并记录将从serviceTask注入的“人员”信息。我也无法访问该文件。如果我可以解决此问题,那么我想做的所有其他事情也将遵循相同的模式。

    public class Worker : BackgroundService
    {
        private readonly ServiceTask serviceTask;
        private readonly ILogger<Worker> _logger;
        

        public Worker(ILogger<Worker> logger,ServiceTask _serviceTask)
        {
            serviceTask = _serviceTask;
            _logger = logger;
          
        }

        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            while (!stoppingToken.IsCancellationRequested)
            {
                var persons = serviceTask.Request();
                    _logger.LogInformation(persons);
                _logger.LogInformation("Worker running at: {time}",DateTimeOffset.Now);
                await Task.Delay(1000,stoppingToken);
            }
        }
    }

How can I make this to work?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)