You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 6下无Startup.cs创建Service Fabric实例监听器

.NET 6 Service Fabric 移除 UseStartup() 的替代方案

在.NET 6的Service Fabric项目中,完全可以把原Startup.cs里的逻辑直接迁移到Program.cs中,不需要依赖UseStartup<Startup>(),核心是把Startup里的服务注册和中间件配置两块逻辑,直接绑定到Web应用构建流程里:

场景1:使用.NET 6新的WebApplicationBuilder(推荐)

如果你的服务是无状态Web服务,在CreateServiceInstanceListeners方法里构建Web应用时,直接用WebApplication.CreateBuilder替代UseStartup,把原Startup的代码拆分到对应阶段:

protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
{
    return new[]
    {
        new ServiceInstanceListener(serviceContext =>
            new WebListenerCommunicationListener(serviceContext, "ServiceEndpoint", (url, listener) =>
            {
                // 初始化WebApplication构建器
                var builder = WebApplication.CreateBuilder(new WebApplicationOptions
                {
                    EnvironmentName = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? Environments.Production
                });

                // --------------------------
                // 原Startup.ConfigureServices逻辑迁移到这里
                // --------------------------
                builder.Services.AddControllers();
                builder.Services.AddSwaggerGen();
                // 其他服务注册,比如AddDbContext、AddAuthentication等

                var app = builder.Build();

                // --------------------------
                // 原Startup.Configure逻辑迁移到这里
                // --------------------------
                if (app.Environment.IsDevelopment())
                {
                    app.UseSwagger();
                    app.UseSwaggerUI();
                }

                app.UseHttpsRedirection();
                app.UseAuthorization();
                app.MapControllers();

                return app;
            }))
    };
}

场景2:兼容旧版WebHostBuilder

如果仍需要使用传统的WebHostBuilder,可以直接调用ConfigureServices和Configure方法,替代UseStartup:

protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
{
    return new[]
    {
        new ServiceInstanceListener(serviceContext =>
            new WebListenerCommunicationListener(serviceContext, "ServiceEndpoint", (url, listener) =>
            {
                var webHost = new WebHostBuilder()
                    .UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.None)
                    .UseUrls(url)
                    // 原ConfigureServices逻辑
                    .ConfigureServices(services =>
                    {
                        services.AddControllers();
                        // 其他服务注册
                    })
                    // 原Configure逻辑
                    .Configure(app =>
                    {
                        app.UseRouting();
                        app.UseEndpoints(endpoints =>
                        {
                            endpoints.MapControllers();
                        });
                    })
                    .Build();

                return webHost;
            }))
    };
}

关键要点

  • 不需要再保留Startup.cs文件,所有启动逻辑都集中在Program.cs的服务实现类中
  • 原Startup里的ConfigureServices对应构建器的builder.Services(或WebHostBuilder的ConfigureServices委托)
  • 原Startup里的Configure对应WebApplication实例的中间件调用链(或WebHostBuilder的Configure委托)

内容的提问来源于stack exchange,提问作者anjalib

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 14:05:05