C# .Net核心启动基类
希望使用.Net core创建一套微型服务,我正在考虑为Startup类创建一个基类,负责配置日志记录、身份验证、端点健康检查等常见功能,从而使我们的所有服务标准化C# .Net核心启动基类,c#,asp.net-core,.net-core,C#,Asp.net Core,.net Core,希望使用.Net core创建一套微型服务,我正在考虑为Startup类创建一个基类,负责配置日志记录、身份验证、端点健康检查等常见功能,从而使我们的所有服务标准化 然而,我感到惊讶的是,这种模式似乎没有被提及。使用自定义中间件实现公共功能是首选模式吗?如有任何与此困境相关的想法或经验,将不胜感激 为Microsoft.extensions.DependencyInjection命名空间中的IServiceCollection和/或IApplicationBuilder接口创建扩展方法: pub
然而,我感到惊讶的是,这种模式似乎没有被提及。使用自定义中间件实现公共功能是首选模式吗?如有任何与此困境相关的想法或经验,将不胜感激 为
Microsoft.extensions.DependencyInjection
命名空间中的IServiceCollection
和/或IApplicationBuilder
接口创建扩展方法:
public static IServiceCollection AddAllCoolStuff(this IServiceCollection services)
{
if (services == null)
{
throw new ArgumentNullException(nameof(services));
}
services.AddSingleton<FooService>();
services.AddTransient<IBooService, BooService>();
...
return services;
}
public static IApplicationBuilder UseAllCoolStuff(this IApplicationBuilder app)
{
if (app == null)
{
throw new ArgumentNullException(nameof(app));
}
app.UseMiddleware<SomeCoolMiddleware>();
...
return app;
}
如果您确实希望这样做,可以使用IStartup接口或StartupBase类。我也做了同样的工作,这样所有的微服务都有相同的配置,使其更易于管理,因为我们有很多微服务 见: 以及: StartupBase的源代码见: 以下是IStartup接口:
public interface IStartup
{
IServiceProvider ConfigureServices(IServiceCollection services);
void Configure(IApplicationBuilder app);
}
您将如何使用它的一个示例:
public class Startup : IStartup
{
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
}
public IConfigurationRoot Configuration { get; set; }
public IServiceProvider ConfigureServices(IServiceCollection services)
{
// Add framework services
return services.BuildServiceProvider();
}
public void Configure(IApplicationBuilder app)
{
var env = app.ApplicationServices.GetService<IHostingEnvironment>();
var loggerFactory = app.ApplicationServices.GetService<ILoggerFactory>();
// Set up application pipeline
}
}
公共类启动:IStartup
{
公共启动(IHostingEnvironment环境)
{
var builder=new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile(“appsettings.json”,可选:false,reloadOnChange:true)
.AddJsonFile($“appsettings.{env.EnvironmentName}.json”,可选:true)
.AddenEnvironmentVariables();
Configuration=builder.Build();
}
公共IConfigurationRoot配置{get;set;}
公共IServiceProvider配置服务(IServiceCollection服务)
{
//添加框架服务
return services.BuildServiceProvider();
}
公共void配置(IApplicationBuilder应用程序)
{
var env=app.ApplicationServices.GetService();
var loggerFactory=app.ApplicationServices.GetService();
//设置应用程序管道
}
}
public class Startup : IStartup
{
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
}
public IConfigurationRoot Configuration { get; set; }
public IServiceProvider ConfigureServices(IServiceCollection services)
{
// Add framework services
return services.BuildServiceProvider();
}
public void Configure(IApplicationBuilder app)
{
var env = app.ApplicationServices.GetService<IHostingEnvironment>();
var loggerFactory = app.ApplicationServices.GetService<ILoggerFactory>();
// Set up application pipeline
}
}