C# .Net核心启动基类

C# .Net核心启动基类,c#,asp.net-core,.net-core,C#,Asp.net Core,.net Core,希望使用.Net core创建一套微型服务,我正在考虑为Startup类创建一个基类,负责配置日志记录、身份验证、端点健康检查等常见功能,从而使我们的所有服务标准化 然而,我感到惊讶的是,这种模式似乎没有被提及。使用自定义中间件实现公共功能是首选模式吗?如有任何与此困境相关的想法或经验,将不胜感激 为Microsoft.extensions.DependencyInjection命名空间中的IServiceCollection和/或IApplicationBuilder接口创建扩展方法: pub

希望使用.Net core创建一套微型服务,我正在考虑为Startup类创建一个基类,负责配置日志记录、身份验证、端点健康检查等常见功能,从而使我们的所有服务标准化


然而,我感到惊讶的是,这种模式似乎没有被提及。使用自定义中间件实现公共功能是首选模式吗?如有任何与此困境相关的想法或经验,将不胜感激

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
    }
}