簡體   English   中英

.NET Core 2.0分離Startup.cs服務注入

[英].NET Core 2.0 Separating Startup.cs Services Injection

所以現在我得到了一個使用N層架構的項目(3層:API,BL,DAL)。 我擔心的是我的所有服務注入都發生在我的Startup.cs文件中。

是否有可能將它們轉移到正確的解決方案?

EG Startup.cs ConfigureServices方法

public void ConfigureServices(IServiceCollection services)
    {
        //MVC
        services.AddMvc();

        //Swagger
        services.AddSwaggerGen(c =>
        {
            c.SwaggerDoc("v1", new Info
            {
                Title = "2Commit Blogpost API",
                Version = "v1"
            });
        });
        services.ConfigureSwaggerGen(options =>
        {
            options.CustomSchemaIds(x => x.FullName);
        });

        //Mediatr
        services.AddScoped<IMediator, Mediator>();
        services.AddTransient<SingleInstanceFactory>(sp => sp.GetService);
        services.AddTransient<MultiInstanceFactory>(sp => sp.GetServices);
        services.AddMediatorHandlers(typeof(Startup).Assembly);

        //MongoDB
        services.Configure<MongoSettings>(s =>
        {
            s.Database = Configuration.GetSection("MongoConnection:Database").Value;
        });
        services.AddSingleton<IMongoClient, MongoClient>(client => new MongoClient(Configuration.GetSection("MongoConnection:ConnectionString").Value));

        //BL
        services.AddTransient<IUserService, UserService>();
        services.AddTransient<IAccountService, AccountService>();

        //DAL
        services.AddTransient<IRepository, MongoRepository>();

        //Authentication
        services.AddAuthentication()
            .AddJwtBearer(jwt =>
            {
                var signingKey =
                    new SymmetricSecurityKey(Encoding.ASCII.GetBytes(Configuration.GetSection("Secret:Key").Value));

                jwt.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuerSigningKey = true,
                    IssuerSigningKey = signingKey,

                    ValidateIssuer = true,
                    ValidIssuer = "2CIssuer",

                    ValidateAudience = true,
                    ValidAudience = "2CAudience",

                    ValidateLifetime = true,

                    ClockSkew = TimeSpan.Zero
                };
            });

        //Authorization
        services.AddAuthorization(auth =>
        {
            auth.AddPolicy("Bearer", new AuthorizationPolicyBuilder(JwtBearerDefaults.AuthenticationScheme).RequireAuthenticatedUser().Build());
        });
    }

理想情況下,“BL”部分應移至我的BL解決方案,DAL和MongoDB部分移至我的DAL解決方案。

我該如何拆分?

您應該使用當前行在BL項目的根目錄中創建BlStartupExtensions.cs

public static class BlStartupExtensions
{
    public static void ConfigureBlServices(this IServiceCollection services)
    {
        //register what you need
    }  
}

然后在Startup.cs注冊它:

services.ConfigureBlServices();

使用DAL,解決方案絕對相同。

您可以在相關項目中創建擴展,如下所示。

public static class DalServiceCollectionExtensions
{
    public static IServiceCollection AddDALDependencies(this IServiceCollection services, IConfigurationRoot configuration)
    {
        services.Configure<MongoSettings>(s =>
        {
            s.Database = configuration.GetSection("MongoConnection:Database").Value;
        });

        services.AddSingleton<IMongoClient, MongoClient>(
            client => new MongoClient(configuration.GetSection("MongoConnection:ConnectionString").Value));

        return services;
    }
}

然后,您可以添加依賴項,如下所示。

public void ConfigureServices(IServiceCollection services)
{        
    services.AddDALDependencies(Configuration);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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