C# 在.Net核心类库中添加启动类
我试图在一个新的.Net核心类库项目中添加OWIN启动类。我已安装Microsoft.AspNetCore.Owin软件包。但我仍然看不到在AddNewItems向导中创建OWIN启动类的选项。它以前曾在.Net类库中。在.Net核心类库中是否有所不同C# 在.Net核心类库中添加启动类,c#,asp.net-core,signalr,signalr-hub,C#,Asp.net Core,Signalr,Signalr Hub,我试图在一个新的.Net核心类库项目中添加OWIN启动类。我已安装Microsoft.AspNetCore.Owin软件包。但我仍然看不到在AddNewItems向导中创建OWIN启动类的选项。它以前曾在.Net类库中。在.Net核心类库中是否有所不同 我基本上想为我的SingalR hub创建一个单独的项目,并通过引用它从任何地方使用它。这与Visual Studio的工具有关。当您处理web项目时,Visual Studio会识别这一点,并在“添加新项目”向导中显示web选项。由于您在类库项
我基本上想为我的SingalR hub创建一个单独的项目,并通过引用它从任何地方使用它。这与Visual Studio的工具有关。当您处理web项目时,Visual Studio会识别这一点,并在“添加新项目”向导中显示web选项。由于您在类库项目中工作,VisualStudio认为您不需要基于web的选项,因此不提供它。幸运的是,您想要的启动类是一个带有一些约定的普通类。您应该能够将名为startup的类添加到类库项目中,并为其提供以下定义以获得所需的内容:
using System;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
namespace MyClassLibrary
{
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
}
}
}
一旦我创建了一个
ChatHub
,它源自Microsoft.AspNetCore.signal.Hub
所有组件都位于单独的.net标准库中
IChatClient
看起来像(用于类型安全):
最后,我在ASP.net核心项目中使用了ChatHub
,其中hub在Startup
中配置如下:
public void配置(IApplicationBuilder应用程序,IWebHostEnvironment环境)
{
if(env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseCors(builder=>
{
建筑商。来源(“https://localhost:3000")
.AllowAnyHeader()
.AllowAnyMethod()
.AllowCredentials();
});
IdentityModelEventSource.ShowPII=true;
}
其他的
{
app.UseGlobalExceptionHandler();
app.UseHttpsRedirection();
app.NwebSecApiSetup();
}
app.UseDefaultFiles();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(端点=>
{
endpoints.MapControllers();
endpoints.MapHub(“/api/chat”);
endpoints.MapHub(“/api/events”);
});
}
此外,我还在ConfigureServices
方法中为SignalR配置了更多内容:
public void ConfigureServices(IServiceCollection services)
{
services.AddCors();
services.AddControllers().AddControllersAsServices();
services.AddHttpContextAccessor();
services.AddConnections();
services.AddSignalR(options =>
{
options.EnableDetailedErrors = true;
})
.AddNewtonsoftJsonProtocol();
...
}
我想您也可以轻松地在其他项目中使用此类中心。模板与项目类型不同。我认为OWIN只是在ASP.NET核心项目中启动的。您可以在ASP.NET Core项目中创建该类,并在库项目中复制/粘贴。我可以将该类从web项目复制到库项目中,但将执行该类。为什么要使用OWIN,而不使用具有精心设计的中间件基础架构的ASP.NET Core?@Peter我如何在类库项目中配置SignalR服务?所有教程都只显示在web项目中添加,服务在startup类中配置。它在哪里调用,或者如何调用?@Marc.2377您是指startup类吗?如果你说的是创业班,那你就不叫它了。您可以告诉ASP.NET您的启动类,并让框架处理调用它的问题。更多信息可在此处找到:
public void ConfigureServices(IServiceCollection services)
{
services.AddCors();
services.AddControllers().AddControllersAsServices();
services.AddHttpContextAccessor();
services.AddConnections();
services.AddSignalR(options =>
{
options.EnableDetailedErrors = true;
})
.AddNewtonsoftJsonProtocol();
...
}