Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core 无法解析类型为';信号机XXXX和x27;试图激活';YYYYAPicController';_Asp.net Core_Dependency Injection_Signalr_Asp.net Mvc Controller - Fatal编程技术网

Asp.net core 无法解析类型为';信号机XXXX和x27;试图激活';YYYYAPicController';

Asp.net core 无法解析类型为';信号机XXXX和x27;试图激活';YYYYAPicController';,asp.net-core,dependency-injection,signalr,asp.net-mvc-controller,Asp.net Core,Dependency Injection,Signalr,Asp.net Mvc Controller,我有两种服务 services.AddControllers(); 及 我在信号器服务实现中继承了这个接口和信号器接口 public class OutputMessages : Hub, IOutputMessages { public OutputMessages(IHubContext<OutputHub> hubContext, ILogger<OutputMessages> logger, ApplicationDbContext db

我有两种服务

        services.AddControllers();

我在信号器服务实现中继承了这个接口和信号器接口

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)
    ....
}
public类OutputMessages:Hub,IOutputMessages
{
公共输出消息(IHubContext hubContext、ILogger logger、ApplicationDbContext dbContext)
{
_hubContext=hubContext;
_db=dbContext;
_记录器=记录器;
}
public void SendUserMessage(字符串不协调、Guid容器ID、字符串消息)
....
}
我尝试将我的信号器服务注入控制器服务:

public class ApplicationAPIController : ControllerBase
{
    public ApplicationAPIController(ILogger<ApplicationAPIController> logger, ApplicationDbContext dbContext, IConfiguration Configuration, CoreObjectDumper.CoreObjectDumper dump, OutputMessages _outputMessages)
    {
公共类应用程序API控制器:ControllerBase
{
公共应用程序API控制器(ILogger记录器、ApplicationDbContext dbContext、IConfiguration配置、CoreObjectDumper.CoreObjectDumper转储、OutputMessages\u OutputMessages)
{
但是收到错误消息

尝试激活“ApplicationAppController”时,无法解析类型“SignalR.OutputMessages”的服务


如何解决此问题?

您不需要将OutputMessages作为瞬态添加,因为您在映射中心和添加/使用signalr时已经这样做了

app.usesigner(路由=>
{
routes.MapHub(“/OutputMessages”);
});
然后,当您注入控制器时,建议注入HubContext,而不是hub本身

例如:

private IHubContext通知shub
{
得到
{
返回此.serviceProvider.GetRequiredService();
}
}
或者在您的情况下:

public ApplicationAPIController(ILogger记录器、ApplicationDbContext数据库上下文、IConfiguration配置、CoreObjectDumper.CoreObjectDumper转储、IHubContext输出消息)
通常,您不应该在DI之外解析集线器。如果您需要在集线器和其他组件之间共享代码,我建议使用IHubContext或将共享代码放在单独的DI服务中


如果我在运行时将Instanceate类注入控制器IHubContext,我会收到-无法解析类型为“Microsoft.AspNetCore.SignalR.Hub`1[IOutputMessages]”的服务,同时尝试激活“OutputMessages”。与您的其他问题相同。解析DI上的Hub并删除构造函数。
public interface ISignalRHandler 
{
    public void RestartProcessor(Guid containerId, string userId, string message);
    ....
}
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)
    ....
}
public class ApplicationAPIController : ControllerBase
{
    public ApplicationAPIController(ILogger<ApplicationAPIController> logger, ApplicationDbContext dbContext, IConfiguration Configuration, CoreObjectDumper.CoreObjectDumper dump, OutputMessages _outputMessages)
    {