后台任务中的 .Net Core 通道

.Net Core Channel in Background Tasks

我想在后台服务中使用香奈儿,但是当运行我的代码出现这个错误,我需要做什么。

抱歉英语不好

Unable to resolve service for type 'System.Threading.Channels.ChannelReader`1[SendMailChanel]' while attempting to activate 'SendEmailService'

public class SendMailChanel
    {
        public List<SendMail> SendMails { get; set; }
        public List<string> MailTos { get; set; }
    }

public class SendEmailService: BackgroundService
{
      
        private readonly ChannelReader<SendMailChanel> _channel;

        public HostedService(         
            ChannelReader<SendMailChanel> channel)
        {
            _channel = channel;
        }

        protected override async Task ExecuteAsync(CancellationToken cancellationToken)
        {
            await foreach (var item in _channel.ReadAllAsync(cancellationToken))
            {
                try
                {
                    // do your work with data
                }
                catch (Exception e)
                {
                    
                }
            }
        }
}

[ApiController]
[Route("api/data/upload")]
public class UploadController : ControllerBase
{
    private readonly ChannelWriter<SendMailChanel> _channel;

    public UploadController (
        ChannelWriter<SendMailChanel> channel)
    {
        _channel = channel;
    }

    public async Task<IActionResult> Upload([FromForm] FileInfo fileInfo)
    {
        SendMailChanel mailChanel = new SendMailChanel();
        mailChanel.SendMails = lstSendMail;
        mailChanel.MailTos = lstEmailTo;
        await _channel.WriteAsync(mailChanel);

        return Ok();
    }
}

Startup.cs
services.AddHostedService<SendEmailService>();

遵循本指南

https://flerka.github.io/personal-blog/2020-01-23-communication-with-hosted-service-using-channels/

    services.AddHostedService<SendEmailService>();
    services.AddSingleton<Channel<SendMailChanel>>(Channel.CreateUnbounded<SendMailChanel>(new UnboundedChannelOptions() { SingleReader = true }));
    services.AddSingleton<ChannelReader<SendMailChanel>>(svc => svc.GetRequiredService<Channel<SendMailChanel>>().Reader);
    services.AddSingleton<ChannelWriter<SendMailChanel>>(svc => svc.GetRequiredService<Channel<SendMailChanel>>().Writer);