ASP.NET Core 2.0 초기 매개 변 수 를 가 진 미들웨어(번역)

5222 단어 .netcore중간 부품
문제.
어떻게 ASP.NET Core 2.0 에서 미들웨어 에 초기 인 자 를 전달 합 니까?
답안
빈 항목 에서 중간 에 필요 한 인 자 를 저장 하기 위해 POCO(Plain Old CLR Object)를 만 듭 니 다.

public class GreetingOptions
{
  public string GreetAt { get; set; }
  public string GreetTo { get; set; }
}
미들웨어 추가:

public class GreetingMiddleware
{
  private readonly RequestDelegate _next;
  private readonly GreetingOptions _options;

  public GreetingMiddleware(RequestDelegate next, GreetingOptions options)
  {
    _next = next;
    _options = options;
  }

  public async Task Invoke(HttpContext context)
  {
    var message = $"Good {_options.GreetAt} {_options.GreetTo}";
    await context.Response.WriteAsync(message);
  }
}

답 1:실례 유형
미들웨어 를 설정 하기 위해 확장 방법 을 추가 합 니 다:

public static IApplicationBuilder UseGreetingMiddleware(this IApplicationBuilder app, GreetingOptions options)
{
  return app.UseMiddleware<GreetingMiddleware>(options);
}
중간 부품 사용 하기:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
  app.UseGreetingMiddleware(new GreetingOptions {
    GreetAt = "Morning",
    GreetTo = "Tahir"
  });
}
정 답 2:함수 유형
미들웨어 를 설정 하기 위해 확장 방법 을 추가 합 니 다:


public static IApplicationBuilder UseGreetingMiddlewareAction(this IApplicationBuilder app, Action<GreetingOptions> optionsAction)
{
  var options = new GreetingOptions();
  optionsAction(options);

  return app.UseMiddleware<GreetingMiddleware>(options);
}
중간 부품 사용 하기:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
  app.UseGreetingMiddlewareAction(options =>
  {
    options.GreetAt = "Morning";
    options.GreetTo = "Tahir";
  });
}
상술 한 두 가지 방법 은 결과 가 일치한다.
실행,이 때 페이지 표시:

토론 하 다.
이전에 우 리 는 단독 클래스 에서 중간 부품 을 정의 하고 확장 방법 을 사용 하여 요청 파이프 에 추가 하 는 것 이 가장 좋 은 실천 이 라 고 토론 한 적 이 있다.우 리 는 중간물 에 인 자 를 전달 해 야 할 수도 있 습 니 다.ASP.NET 코어 소스 코드 와 다른 온라인 예제 에 대한 학습 을 통 해 저 는 상기 두 가지 모델 을 정리 해 냈 습 니 다.
상술 한 두 가지 해결 방법 은 모두 매우 직관 적 이다.우 리 는 파 라 메 터 를 하나의 POCO 클래스 에 밀봉 한 다음 확장 방법 을 만들어 다음 파 라 메 터 를 받 아들 입 니 다.
1.POCO 실례
2.호출 할 함수(함수 에 POCO 설정)
주:POCO 인 스 턴 스 는 구조 함 수 를 통 해 미들웨어 로 전 달 됩 니 다.UseMiddleware()방법 은 가 변 매개 변수 params object[]를 수신 하고 이 매개 변 수 를 미들웨어 구조 함수 에 전달 합 니 다.
서비스 설정
이 모드 들 은 서비스 용기 에 서비스 인 스 턴 스 를 추가 하 는 데 도 사용 할 수 있다.설명 하기 편리 하도록 우 리 는 먼저 서 비 스 를 추가 합 니 다.

public interface IMessageService
{
  string FormatMessage(string message);
}

public class MessageService : IMessageService
{
  private readonly GreetingOptions _options;

  public MessageService(GreetingOptions options)
  {
    _options = options;
  }

  public string FormatMessage(string message)
  {
    return $"Good {_options.GreetAt} {_options.GreetTo} - {message}";
  }
}

서 비 스 를 설정 하기 위해 다음 확장 방법 을 추가 합 니 다:

public static IServiceCollection AddMessageService(this IServiceCollection services, GreetingOptions options)
{
  return services.AddScoped<IMessageService>(factory => new MessageService(options));
}

public static IServiceCollection AddMessageServiceAction(this IServiceCollection services, Action<GreetingOptions> optionsAction)
{
  var options = new GreetingOptions();
  optionsAction(options);

  return services.AddScoped<IMessageService>(factory => new MessageService(options));
}

Configure()에서 이 서 비 스 를 사용 합 니 다:

public void ConfigureServices(IServiceCollection services)
{
  services.AddMessageService(new GreetingOptions
  {
    GreetAt = "Morning",
    GreetTo = "Tahir"
  });

  services.AddMessageServiceAction(options =>
  {
    options.GreetAt = "Morning";
    options.GreetTo = "Tahir";
  });
}

Configure Services()가 Configure()보다 먼저 실행 되 기 때문에 Configure()에 이 서 비 스 를 직접 주입 할 수 있 습 니 다.

public void Configure(IApplicationBuilder app, IHostingEnvironment env, IMessageService msg)
{
  app.Run(async (context) =>
  {
    await context.Response.WriteAsync(msg.FormatMessage("by sanshi"));
  });
}
실행,이 때 페이지 표시:

소스 코드 다운로드
원문
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기