如何使用一些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
构造函数在应用程序中只执行一次。