如何在 Azure 移动服务中注入 IHubContext

How to inject IHubContext in Azure Mobile Services

要从集线器外部获取 IHubContext,我使用:

public class EventSender
{
   private readonly IHubContext context;

   public EventSender(ApiServices services)
   {
       context = services.GetRealtime<MyHub>();
   }

   public void Send(string message)
   {
       context.Clients.All.Send(message);
   }
}

其中 services 是一个 ApiServices 实例,它被注入到调用 class 中。 如果我想注入 IHubContext 本身怎么办?我怎么做? 我试图在 WebApiConfig.cs 中注册 IHubContext 实例,如下所示:

var configBuilder = new ConfigBuilder(options, (httpConfig, autofac) =>
{
    autofac.RegisterType<Logger>().As<ILogger>().SingleInstance();
    autofac.RegisterInstance(??).As<IHubContext>(); <-- ????
    ....

但这有两个问题:

  1. 我无权访问 ApiServices 实例(并且 WebApiConfig class 是静态的,因此我无法将其注入到那里)。
  2. 我将其注册为什么类型? IHubContext 好像太笼统了。

如果您可以注入 ApiServices,您可以在尝试注册您的依赖项时访问。

你能试试这样的吗?

autofac.Register(c => 
  {
    var services = c.Resolve<ApiServices>();
    return services.GetRealtime<MyHub>();
  }.As<IHubContext>();

在你的构造函数中:

public EventSender(IHubContext context)
{
  this.context = context;
}