C# 在.NET Core中将HubContext获取为null
我正在使用Signal处理.NET核心应用程序。我的集线器类别代码是:C# 在.NET Core中将HubContext获取为null,c#,.net-core,signalr,signalr-hub,C#,.net Core,Signalr,Signalr Hub,我正在使用Signal处理.NET核心应用程序。我的集线器类别代码是: public class LiveDataHub : Hub { public async Task GetUpdatedDataFromServer() { try { var dal = new DAL(); var dashboardVM = dal.GetDashboardViewModels();
public class LiveDataHub : Hub
{
public async Task GetUpdatedDataFromServer()
{
try
{
var dal = new DAL();
var dashboardVM = dal.GetDashboardViewModels();
Clients.Caller.SendAsync("UpdatePortalWithUpdatedData", dashboardVM);
}
catch(Exception ex)
{
}
}
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseSignalR(routes =>
{
routes.MapHub<LiveDataHub>("/LiveDataHub");
});
}
我的Startup.cs代码是:
public class LiveDataHub : Hub
{
public async Task GetUpdatedDataFromServer()
{
try
{
var dal = new DAL();
var dashboardVM = dal.GetDashboardViewModels();
Clients.Caller.SendAsync("UpdatePortalWithUpdatedData", dashboardVM);
}
catch(Exception ex)
{
}
}
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseSignalR(routes =>
{
routes.MapHub<LiveDataHub>("/LiveDataHub");
});
}
我有另一个类ModuleLoader,其代码是:
public class ModuleLoader
{
GlobalCache _globalCache = GlobalCache.GetInstance();
private readonly IHubContext<LiveDataHub> _hubContext;
public ModuleLoader()
{
}
public ModuleLoader(IHubContext<LiveDataHub> hubContext)
{
_hubContext = hubContext;
}
private void OnAdapterGroupDataReceived(DeviceAdapterGroup deviceAdapterGroup)
{
var dal = new DAL();
dal.InsertOrUpdateAllAdapters(deviceAdapterGroup.AdapterGroup);
if(deviceAdapterGroup != null)
{
dal.InsertAllDeviceAdapter(deviceAdapterGroup);
}
var allAdapters = dal.GetAllAdaptersConnectedToDevice(deviceAdapterGroup.DeviceId);
var adaptersToDelete = allAdapters.Except(deviceAdapterGroup.AdapterGroup.Select(x => x.AdapterId)).ToList();
if (adaptersToDelete != null && adaptersToDelete.Count > 0)
dal.DeleteAllAdapters(adaptersToDelete);
var dashboardVM = dal.GetDashboardViewModels();
_hubContext.Clients.All.SendAsync("UpdatePortalWithUpdatedData", dashboardVM);
}
}
问题是,当我运行这段代码时,我得到一个异常,即_hubContext为null。我怎样才能解决它。如果您还没有将ModuleLoader类添加到DI容器中,我们将非常感谢您的帮助。您可以使用.net core默认容器,如下所示:
public void ConfigureServices(IServiceCollection services)
{
services.AddSignalR();
services.AddScoped<ModuleLoader>();
}
您应该删除空构造函数,因为这毫无意义。这可能是您的问题。我正在应用程序的某个地方调用ModuleLoader构造函数。我应该传递什么参数,我的意思是参数的值是什么。这里有点混乱。@silvermind我的意思是如何获取hubcontext的值。那么如何设置@brandonhein?依赖注入应该使用正确的参数调用该构造函数。如果您将模块加载器添加到服务中,并通过服务提供商手动解析模块加载器,可能会发生这种情况?