SignalR中有一个依赖注入的教程:http ://www.asp.net/signalr/overview/signalr-20/extensibility/dependency-injection 。示例用于 NInject,但您可以轻松自定义它。您需要记住的是,在初始化 SignalR(映射集线器)之前配置您的 DI 容器。
然后您可以注册您的集线器上下文以便能够解决它。非常重要的是,您在映射集线器后注册集线器上下文。Hub 上下文可以保存到变量中并根据需要存储。您的启动配置方法如下所示:
public void Configure(IAppBuilder app)
{
var resolver = new MyStructureMapResolver();
// configure depdendency resolver
GlobalHost.DependencyResolver = this.container.Resolve<IDependencyResolver>();
// map the hubs
app.MapSignalR();
// get your hub context
var hubContext = GlobalHost.ConnectionManager.GetHubContext<NotificationHub>();
// register it in your structure map
ObjectFactory.Inject<IHubContext>(hubContext);
}
要使您的集线器上下文强类型化,您可以执行以下操作:
public interface INotificationHubContext {
void NotifyOthersAllOnLogin(string msg);
}
然后你做这个:
// get your hub context
var hubContext = GlobalHost.ConnectionManager.GetHubContext<NotificationHub, INotificationHubContext>();
// register it in your structure map
ObjectFactory.Inject<IHubContext<INotificationHubContext>>(hubContext);
希望这可以帮助。