c# - 如何在 ASP.NET 5 (vNext) 中设置 SignalR Hub 依赖注入(inject)?

标签 c# asp.net dependency-injection signalr asp.net-core

尝试使用作为 ASP.NET 5 ( repo ) 一部分的 SignalR-Server 将依赖注入(inject)到我的 SignalR Hub 类中。我试图从 this link 的教程中弄清楚这一点。但鉴于 GlobalHost 不再可用,我似乎无法确定如何执行此操作。这是我正在尝试做的事情:

Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    services.AddSignalR();
    services.AddSingleton<IState, State>();
}

public void Configure(IApplicationBuilder app)
{
    app.UseSignalR();
}

MyHub.cs

public class MyHub : Hub
{
    public IState State { get; set; }

    // SignalR accepts this parameterless ctor
    public MyHub()
    {
    }

    // SignalR won't use this because it has a parameter
    public MyHub(IState state)
    {
        State = state;
    }
}

我怎样才能得到 SignalR-Server使用 MyHub(IState state) 构造函数注入(inject)所需的依赖项?

最佳答案

最好的方法(对于 Asp.Net 5)为接收 IServiceProvider 的 DefaultDependencyResolver 创建自定义解析器:

 public class CustomSignalRDependencyResolver : DefaultDependencyResolver
{
    private readonly IServiceProvider _serviceProvider;

    public CustomSignalRDependencyResolver(IServiceProvider serviceProvider)
    {
        _serviceProvider = serviceProvider;
    }

    public override object GetService(Type serviceType)
    {
        var service = _serviceProvider.GetService(serviceType);

        return service ?? base.GetService(serviceType);
    }


}

然后在 StartUp 类上

 public void ConfigureServices(IServiceCollection services)
    {

         services.AddSingleton<IState, State>();

        //... other services


        GlobalHost.DependencyResolver = new CustomSignalRDependencyResolver(services.BuildServiceProvider());

    }

关于c# - 如何在 ASP.NET 5 (vNext) 中设置 SignalR Hub 依赖注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32150163/

相关文章:

c# - 不检索 XML 文件并指示来自新闻的页面

c# - 通用容器内是什么类型

c# - 为什么我的 .NET 属性不执行操作?

dependency-injection - 使用 Guice + Kotlin 绑定(bind)对象列表

scala - 使用 Scala Guice 将特征绑定(bind)到对象

c# - 添加到 WPF Canvas 的图像更改大小

c# - 允许对 App_Data 的请求

c# - 我尝试使用 EXT.NET 2.0 将文件上传到服务器

asp.net - 在 ASP.Net 应用程序和最佳实践中使用 WCF

java - @Autowired 失败 - java.lang.ClassCastException