.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
相关产品推荐
相关产品推荐

