Configuration 在ASP.NET5中配置组件

Configuration 在ASP.NET5中配置组件,configuration,asp.net-core,Configuration,Asp.net Core,在ASP.Net 5中配置组件有不同的方法: AddXXX方法,用于添加服务 ConfigureXXX方法,用于配置选项 UseXXX方法,用于将中间件注册到管道中 ConfigureXXX()方法负责配置组件或子组件: 公共静态IServiceCollection配置授权( [NotNull]此IServiceCollection服务, [NotNull]操作 公共静态无效配置MVC( [NotNull]此IServiceCollection服务, [NotNull]操作设置(操作) {

在ASP.Net 5中配置组件有不同的方法:

  • AddXXX方法,用于添加服务
  • ConfigureXXX方法,用于配置选项
  • UseXXX方法,用于将中间件注册到管道中
ConfigureXXX()方法负责配置组件或子组件:

公共静态IServiceCollection配置授权(
[NotNull]此IServiceCollection服务,
[NotNull]操作

公共静态无效配置MVC(
[NotNull]此IServiceCollection服务,
[NotNull]操作设置(操作)
{
配置(setupAction);
}
但有时配置XXX有点复杂:

公共静态IServiceCollection配置CookieAuthentication(
[NotNull]此IServiceCollection服务,
[NotNull]i配置配置,
字符串选项(名称)
{
return services.Configure(配置,选项名称);
}
为什么一些现有组件比其他组件更“可配置”

作为一名组件编写者,我应该实践什么

另一个相关问题: AddXXX&UseXXX有时允许配置组件:

公共静态IMvcBuilder AddMvcCore(
[NotNull]此IServiceCollection服务,
[NotNull]操作设置(操作)
{
配置DefaultServices(服务);
ADDMVCO储备(服务);
配置(setupAction);
返回新的MvcBuilder(){Services=Services,};
}

公共静态IApplicationBuilder使用OAuthAuthentication(
[NotNull]此IApplicationBuilder应用程序,
[NotNull]字符串身份验证方案,
操作配置选项=空)
{
返回app.UseMiddleware(
// [...]
}

基本上,使用三种不同的方法配置选项之间有什么区别?特别是在同一个组件上可用时。

因此,对于选项和使用IOptions服务的任何组件,我们的想法是使在堆栈中的任意点配置选项变得容易(添加、使用、配置)它们都是有效的,但秩序确实重要

我们使用的一般模式通常是在任何看起来有用的地方执行
操作

public static IServiceCollection ConfigureAuthorization(
    [NotNull] this IServiceCollection services, 
    [NotNull] Action<AuthorizationOptions> configure)
{
    return services.Configure(configure);
}
public static void ConfigureMvc(
    [NotNull] this IServiceCollection services,
    [NotNull] Action<MvcOptions> setupAction)
{
    services.Configure(setupAction);
}
public static IServiceCollection ConfigureCookieAuthentication(
    [NotNull] this IServiceCollection services, 
    [NotNull] IConfiguration config, 
    string optionsName)
{
    return services.Configure<CookieAuthenticationOptions>(config, optionsName);
}
public static IMvcBuilder AddMvcCore(
    [NotNull] this IServiceCollection services,
    [NotNull] Action<MvcOptions> setupAction)
{
    ConfigureDefaultServices(services);
    AddMvcCoreServices(services);
    services.Configure(setupAction);
    return new MvcBuilder() { Services = services, };
}
public static IApplicationBuilder UseOAuthAuthentication(
    [NotNull] this IApplicationBuilder app, 
    [NotNull] string authenticationScheme, 
    Action<OAuthAuthenticationOptions> configureOptions = null)
{
    return app.UseMiddleware<OAuthAuthenticationMiddleware<OAuthAuthenticationOptions>>(
    // [...]
}