如果我为集线器定义构造函数,则连接关闭

时间:2019-04-13 05:14:03

标签: c# asp.net-core dependency-injection constructor signalr

我需要我的Hub的构造函数才能连接到DependencyInjections。 一旦声明了private readonly依赖变量和集线器的构造函数-即使其中没​​有代码,我甚至在ConnectionClose运行之前就得到了OnConnectedAsync

意味着OnConnectedAsync永远不会运行!

  

错误:连接已断开,错误为“错误:服务器在关闭时返回了错误:连接因错误而关闭。”

private readonly Chatter _chatter;

public ChatHub(Chatter chatter)
{
    _chatter = chatter;
}

甚至

private readonly Chatter _chatter;

public ChatHub(Chatter chatter)
{
    //Empty
}

但这没关系:

private readonly Chatter _chatter;

public ChatHub()
{
    //Whatever...
}

2 个答案:

答案 0 :(得分:1)

您需要注册您的依赖项,以便可以将其注入到集线器中。

services.AddTransient<Chatter>();

可能是DI容器不知道要注入依赖项,从而导致错误。

答案 1 :(得分:0)

就我而言,我试图发送我的 AppSettings 类。在我的 Startup.cs 中,我已经有了我的 appsettings.json 类 AppSettingOptions,为服务注入设置。

services.Configure<AppSettingOptions>(Configuration.GetSection(AppSettingOptions.SettingsName));

但我忘记使用 IOptions 数据类型作为参数而不是 AppSettingOptions 数据类型。

public ClassA(IOptions<AppSettingOptions> appSettingOptions)

对于额外的调试,如果这不能解决您的问题,如果您将参数设置为默认值 null,您至少应该能够进入服务器端的构造函数,而不是在客户端查找错误。

public ClassA(IOptions<AppSettingOptions> settingOptions = null)