首页 > 解决方案 > 一个文件启动多个微服务

问题描述

您如何看待许多微服务的单文件启动实现?我有许多具有相同配置的微服务,如果我有一个具有特定配置的微服务,那么我将实现特定的启动。

标签: c#asp.net-core.net-coreasp.net-core-mvcmicroservices

解决方案


我对此的解决方案,如果它为任何人服务:

类抽象与 Base

public abstract class BaseStartup
{
    #region Constructors

    protected BaseStartup(IConfiguration configuration, IWebHostEnvironment environment)
    {
        Configuration = configuration;
        Environment = environment;
    }

    #endregion

    protected IConfiguration Configuration { get; }

    protected IWebHostEnvironment Environment { get; }

    public virtual void ConfigureServices(IServiceCollection services)
    {
        services.AddHealthCheck(Configuration);
        services.AddExpressiveAnnotations();
        services.AddConsul(Configuration, Environment);
        services.AddApiClients(Configuration);
        services.AddConsulConfiguration(Configuration, Environment);
        services.AddHttpContextAccessor();
        services.AddControllers();
        services.AddLogging(loggingBuilder => loggingBuilder.AddSerilog(dispose: true));
        services.AddDbContextBaseContext(Configuration);
        services.AddScrutorServiceAndRepository();
    }

    public virtual void Configure(IApplicationBuilder app)
    {
        app.UseHttpsRedirection();
        app.UseRouting();
        app.UseAuthorization();
        app.UseSwagger(Environment, Configuration);
        app.UseEndpointWithHealthService();
    }
}

微服务的启动:

/// <summary>
/// Principal class for configuration app from net core
/// </summary>
public class Startup : BaseStartup
{
    /// <summary>
    /// Constructor of Startup
    /// </summary>
    /// <param name="configuration"></param>
    /// <param name="environment"></param>
    public Startup(IConfiguration configuration, IWebHostEnvironment environment) : base(configuration, environment)
    {
    }


    /// <summary>
    /// IoC of .NET Core for inject dependecy injection 
    /// </summary>
    /// <param name="services"></param>
    public override void ConfigureServices(IServiceCollection services)
    {
        base.ConfigureServices(services);
        services.AddSwagger(configuration: Configuration,
                            assemblyName: Assembly.GetExecutingAssembly().GetName().Name,
                            baseDirectory: AppContext.BaseDirectory);
        services.AddAutoMapper(typeof(TsrAutoMapperConfig).GetTypeInfo().Assembly);

    }

    /// <summary>
    /// Principal method load all configuration and runing the app
    /// </summary>
    /// <param name="app"></param>
    public override void Configure(IApplicationBuilder app)
    {
        app.UseDeveloperExceptionPage(Environment);
        app.UseLogActivityMiddleware(nameof(ApiIngestTSR));
        app.UseLogExceptionMiddleware(Environment, nameof(ApiIngestTSR));
        base.Configure(app);
    }
}

推荐阅读