C# 在.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选项。由于您在类库项

我试图在一个新的.Net核心类库项目中添加OWIN启动类。我已安装Microsoft.AspNetCore.Owin软件包。但我仍然看不到在AddNewItems向导中创建OWIN启动类的选项。它以前曾在.Net类库中。在.Net核心类库中是否有所不同


我基本上想为我的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();

    ...
}