簡體   English   中英

.Net核心啟動基類

[英].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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM