Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .NETCore2.0中的信号器依赖项注入_C#_Asp.net Core_Dependency Injection_Signalr_Asp.net Core Signalr - Fatal编程技术网

C# .NETCore2.0中的信号器依赖项注入

C# .NETCore2.0中的信号器依赖项注入,c#,asp.net-core,dependency-injection,signalr,asp.net-core-signalr,C#,Asp.net Core,Dependency Injection,Signalr,Asp.net Core Signalr,我对SignalR很陌生,尝试在Asp.Net Core 2.0中使用SignalR v1.0.0-alpha2-final创建聊天应用程序,并且需要在ChatHub中使用依赖项注入。我发现的所有示例似乎都过时了,或者与Asp.NETCore无关 有人知道如何正确地做到这一点吗 编辑:澄清一下,我知道如何在Asp.Net内核中进行DI,问题是我不知道如何在SignalR Hub中进行DI 在.NET Core 2中,依赖项注入是一项功能,您不需要添加Unity等软件包。这是官方文档 基本上,当使

我对SignalR很陌生,尝试在Asp.Net Core 2.0中使用SignalR v1.0.0-alpha2-final创建聊天应用程序,并且需要在ChatHub中使用依赖项注入。我发现的所有示例似乎都过时了,或者与Asp.NETCore无关

有人知道如何正确地做到这一点吗


编辑:澄清一下,我知道如何在Asp.Net内核中进行DI,问题是我不知道如何在SignalR Hub中进行DI

在.NET Core 2中,依赖项注入是一项功能,您不需要添加Unity等软件包。这是官方文档

基本上,当使用.NET核心应用程序时,您有入口点
Program.cs
Startup.cs
文件,它们在应用程序初始启动时执行

依赖注入的“魔力”发生在
Startup.cs
中。(默认情况下)您有

public void ConfigureServices(IServiceCollection services)
{
 /// code
}
要添加注射,您需要执行以下操作:

services.AddTransient<IMyInterface, MyClassImplementingMyInterface>();
services.AddTransient();
除了
AddTransient
之外,还有另外两种可能性定义服务的生命周期。它们是:
AddSingleton
AddScoped
。我上面提到的答案和文档很好地解释了所有这些问题的含义,但仅用几句话:

根据我们如何配置此服务的生存期 容器将提供相同或不同的 向请求类提供服务

  • AddTransient
    -对象总是不同的;一个新的实例是 提供给每个控制器和每个服务
  • AddScoped
    -请求中的对象相同,但 不同请求之间的差异
  • AddSingleton
    -每个对象的对象都是相同的 以及每个请求(无论是否在 配置服务)

    • 在.NET Core 2中,依赖项注入是一项功能,您不需要添加Unity等软件包。这是官方文档

      基本上,当使用.NET核心应用程序时,您有入口点
      Program.cs
      Startup.cs
      文件,它们在应用程序初始启动时执行

      依赖注入的“魔力”发生在
      Startup.cs
      中。(默认情况下)您有

      public void ConfigureServices(IServiceCollection services)
      {
       /// code
      }
      
      要添加注射,您需要执行以下操作:

      services.AddTransient<IMyInterface, MyClassImplementingMyInterface>();
      
      services.AddTransient();
      
      除了
      AddTransient
      之外,还有另外两种可能性定义服务的生命周期。它们是:
      AddSingleton
      AddScoped
      。我上面提到的答案和文档很好地解释了所有这些问题的含义,但仅用几句话:

      根据我们如何配置此服务的生存期 容器将提供相同或不同的 向请求类提供服务

      • AddTransient
        -对象总是不同的;一个新的实例是 提供给每个控制器和每个服务
      • AddScoped
        -请求中的对象相同,但 不同请求之间的差异
      • AddSingleton
        -每个对象的对象都是相同的 以及每个请求(无论是否在 配置服务)

      对于SignalR,有一个
      SignalRAppBuilderExtensions
      类提供了
      UseSignalR
      方法

      Startup.cs
      中:

      using Microsoft.AspNetCore.Builder;
      public void Configure(IApplicationBuilder app)
      {
          app.UseSignalR(routes =>
          {
              routes.MapHub<YourHub>("/yourhub");
          }
       }
      

      版本:Microsoft.AspNetCore.SignalR 1.0.0-preview1-final

      对于SignalR,有一个
      SignalRAppBuilderExtensions
      类提供了
      UseSignalR
      方法

      Startup.cs
      中:

      using Microsoft.AspNetCore.Builder;
      public void Configure(IApplicationBuilder app)
      {
          app.UseSignalR(routes =>
          {
              routes.MapHub<YourHub>("/yourhub");
          }
       }
      

      版本:Microsoft.AspNetCore.SignalR 1.0.0-preview1-final

      为什么不创建一个带有类/接口的SignalR包装并使用它呢?为什么不创建一个带有类/接口的SignalR包装并使用它呢?谢谢,我的问题不仅仅与依赖注入直接相关,正如我在该项目的其他方面所述,问题在于“标准”的方式不适用于信号枢纽。从我所读到的“唯一的问题是,Signal应用程序不直接创建集线器;Signal为您创建集线器。默认情况下,Signal希望集线器类具有无参数构造函数。”[.但是这个文档,虽然是关于signalr的,但不是针对.net core的。我明白了,很抱歉我错过了。那么这个呢-谢谢,我的问题不仅仅与依赖注入直接相关,因为我已经涵盖了项目的所有其他方面,问题是“标准”这样做的方式对signalr hub不起作用。从我读到的“唯一的问题是signalr应用程序不直接创建集线器;signalr为您创建集线器。默认情况下,signalr希望集线器类具有无参数构造函数。”[.但是这篇文档,虽然是关于signalr的,但不是针对.net core的。我明白了,很抱歉我错过了。好吧,这个-这个有效,谢谢!关于这个问题呢?有什么想法吗?提前谢谢…这个有效,谢谢!关于这个问题呢?有什么想法吗?提前谢谢。。。