【发布时间】:2021-02-14 18:18:50
【问题描述】:
我想在后台服务中使用chanel,但是在运行我的代码时出现这个错误,我需要做什么。
抱歉英语不好
无法解析服务类型 'System.Threading.Channels.ChannelReader`1[SendMailChanel]' 尝试激活“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>();
【问题讨论】:
-
您尚未在 DI 容器中注册
Channel<SendMail>的实例 -
@JohanP 怎么做先生,我谷歌太多但没有找到任何东西这是我尝试过的:1.公共接口 IChannelReader 2.公共 SendEmailService(MySettingsConfiguration 配置,IChannelReader chanel ) 3. services.AddSingleton
();但是抛出错误不能将对象...转换为...