2017-09-26 22 views
2

所以现在我有一个项目,A N层架构的工作(3层:API,BL,DAL)。我担心的是我服务的所有注射在我Startup.cs文件发生。.NET 2.0核心分离Startup.cs服务注入

是否有可能将其移动到正确的解决方案?

E.G. 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的解决方案。

我该如何分割它呢?

回答

3

你应该在你的BL项目的根目录创建BlStartupExtensions.cs,与当前行:

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

然后在它注册您的Startup.cs

services.ConfigureBlServices(); 

随着DAL,解决方案是绝对的相同。

2

你可以在你的相关项目如下面创建扩展。

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); 
}