C# .NETCore2.0中的信号器依赖项注入
我对SignalR很陌生,尝试在Asp.Net Core 2.0中使用SignalR v1.0.0-alpha2-final创建聊天应用程序,并且需要在ChatHub中使用依赖项注入。我发现的所有示例似乎都过时了,或者与Asp.NETCore无关 有人知道如何正确地做到这一点吗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等软件包。这是官方文档 基本上,当使
编辑:澄清一下,我知道如何在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
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的。我明白了,很抱歉我错过了。好吧,这个-这个有效,谢谢!关于这个问题呢?有什么想法吗?提前谢谢…这个有效,谢谢!关于这个问题呢?有什么想法吗?提前谢谢。。。