如何解决尝试激活“ YYYYAPIController”时,无法解析类型为“ SignalR.XXXX”的服务
我有两项服务。
services.AddControllers();
和
services.AddSignalR()
.AddHubOptions<OutputMessages>(options =>
{
options.EnableDetailedErrors = true;
});
services.AddScoped<IOutputMessages,OutputMessages>();
第二个服务也被确定为
app.UseEndpoints(endpoints =>
endpoints.MapHub<OutputMessages>("/OutputMessages",options =>
{
options.Transports =
HttpTransportType.WebSockets |
HttpTransportType.LongPolling;
});
我有SignalR服务的界面:
public interface ISignalRHandler
{
public void RestartProcessor(Guid containerId,string userId,string message);
....
}
我在SignalR服务实现中继承了此接口和SignalR接口
public class OutputMessages : Hub,IOutputMessages
{
public OutputMessages(IHubContext<OutputHub> hubContext,ILogger<OutputMessages> logger,ApplicationDbContext dbContext)
{
_hubContext = hubContext;
_db = dbContext;
_logger = logger;
}
public void SendUserMessage(string discordId,Guid containerId,string message)
....
}
我尝试将SignalR服务注入控制器服务:
public class ApplicationAPIController : ControllerBase
{
public ApplicationAPIController(ILogger<ApplicationAPIController> logger,ApplicationDbContext dbContext,IConfiguration Configuration,CoreObjectDumper.CoreObjectDumper dump,OutputMessages _outputMessages)
{
但是收到错误消息
在尝试激活“ ApplicationAPIController”时无法解析“ SignalR.OutputMessages”类型的服务。
如何解决这个问题?
解决方法
您不需要将OutputMessages添加为瞬态,因为在映射集线器并添加/使用signalr时已经这样做了。
app.UseSignalR(routes =>
{
routes.MapHub<OutputMessages>("/OutputMessages");
});
然后,在注入控制器时,建议注入HubContext而不是Hub本身。
示例:
private IHubContext<NotificationsHub,INotificationsHub> NotificationsHub
{
get
{
return this.serviceProvider.GetRequiredService<IHubContext<NotificationsHub,INotificationsHub>>();
}
}
或您的情况:
public ApplicationAPIController(ILogger<ApplicationAPIController> logger,ApplicationDbContext dbContext,IConfiguration Configuration,CoreObjectDumper.CoreObjectDumper dump,IHubContext<OutputMessages,IOutputMessages> _outputMessages)
您通常不应该用DI解决集线器。如果需要在集线器和其他组件之间共享代码,建议使用IHubContext或将共享代码放在单独的DI服务中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。