[英].Net core startup base class
希望使用.Net核心來創建一套微服務,我正在考慮為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;
}
並在你的Startup中使用它們:
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddAllCoolStuff();
}
public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
{
app.UseAllCoolStuff();
}
}
如果您真的希望這樣做,可以使用IStartup接口或StartupBase類。 我已經做了同樣的事情,所以所有微服務具有相同的配置,使得它更容易管理,因為我們有很多微服務。
請參閱: https : //www.strathweb.com/2017/06/resolving-asp-net-core-startup-class-from-the-di-container/
並且: https : //docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.hosting.startupbase?view=aspnetcore-2.0
StartupBase的源代碼見: https : //github.com/aspnet/Hosting/blob/dev/src/Microsoft.AspNetCore.Hosting/Startup/StartupBase.cs
以下是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
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.