如何实际将信号器的 IConnectionManager 注册到依赖注入



如何使用一些DependencyInjection实现实际注册IConnectionManager?(不幸的是,它不是核心(

我尝试了Autofac和一些";手动";实现它的方法,但它们都不适合我

public void Configuration(IAppBuilder app)
{
var builder = new ContainerBuilder();
builder.RegisterType<IConnectionManager>().InstancePerRequest();
IContainer container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
app.MapSignalR();
}

没有为此对象定义无参数构造函数。

然后如何在控制器中获得SignalR的IConnectionManager

private readonly IHubContext _hubContext;
public HomeController(IConnectionManager hubManager)
{
_hubContext = hubManager.GetHubContext<TestHub>();
}

您不需要将IConnectionManager注入控制器。您可以从GlobalHost获得IConnectionManager

GlobalHost.ConnectionManager:

获取默认的IConnectionManager。


尝试以下解决方案,

public HomeController
{
private static IHubContext HubContext { get; set; }; 
//Use static constructor, as getting hub context is an expensive operation
public static HomeController()
{
HubContext = GlobalHost.ConnectionManager.GetHubContext<TestHub>();
}
...
}

注意:由于获取默认IConnectionManger是一项昂贵的任务,请使用static属性和static构造函数在应用程序中只执行一次。

最新更新