2016-11-30 6 views
12

알려진 바와 같이 ASP.NET Core의 Configure (클래스 시작) 메서드의 IApplicationBuilder에는 HttpContext 형식의 입력 매개 변수와 반환 값으로 Task를 사용하여 'Invoke'메서드를 포함하는 특정 의미 체계가 필요합니다. 하지만 인터페이스로 구현되지 않은 이유는 무엇입니까?ASP.NET Core의 미들웨어가 특정 의미를 필요로하지만 인터페이스가 필요하지 않은 이유는 무엇입니까?

public class FakeMiddleware 
{ 

} 

을하고 등록 : 나는 같은 것을 쓸 수

app.UseMiddleware<FakeMiddleware>(); 

우리는 런타임 오류가 발생합니다. 물론, 사소한 일이며 쉽게 발견하고 고칠 수 있지만 인터페이스가 없으면 너무 거칠게 구현 되었습니까?

답변

16

Invoke 메서드는 유연하며 추가 매개 변수를 요청할 수 있습니다. ASP.NET은 응용 프로그램의 서비스 구성을 사용하여 추가 매개 변수를 주입합니다.

public async Task Invoke(HttpContext ctx, 
         IHostingEnvironment host, 
         ISomethingElse service) 
{ 
    // ... 
} 

C# 인터페이스 정의는 이러한 유연성을 좋은 방법으로 제공 할 수 없습니다.

+0

그래서 DI를 사용하면 현재 "버전"의 단점에 대해 생각할 수 있습니까? :)이 상황 (추가 매개 변수 및 자동으로 해결)이 이곳보다 분산 될 수 있기 때문에 –

+0

오, 이런 생성자가 주입되어야합니다. 요청 당 의존성이라면 팩토리 패턴은 잘 작동 할 것이다. – Rbjz