c# - 一个文件启动多个微服务
问题描述
您如何看待许多微服务的单文件启动实现?我有许多具有相同配置的微服务,如果我有一个具有特定配置的微服务,那么我将实现特定的启动。
解决方案
我对此的解决方案,如果它为任何人服务:
类抽象与 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);
}
}
推荐阅读
- ms-access - MS Access 组合框显示选项卡
- html - SVG 光标有不需要的灰色边缘
- android - 将 ImageButton 放在两个视图组之间
- amazon-web-services - 权限有助于设置用户对 S3 的访问权限
- javascript - IIFE:如果我返回警报而不将其包装在函数中,为什么我的代码会忽略 addEventListener?
- keras - 使用 Keras 添加和访问辅助 tf.Dataset 属性
- java - Java 流操作调用
- c# - 当我有该类的多个实例时,如何获取该类的索引/事件?
- r - R:生成针对特定玩家的赢/输记录表
- bash - 当管道到 xxd 时,为什么有些文本未经修改就通过了?