2016-11-30 68 views
12

Jak wiadomo, IApplicationBuilder metody Configure (klasa Startup) w ASP.NET Core wymaga specyficznej semantyki (aby metoda 'Invoke' z parametrem wejściowym typu HttpContext i Zadanie jako wartością zwracaną). Ale dlaczego nie jest zaimplementowany jako interfejs? Mogę napisać coś podobnego:Dlaczego oprogramowanie pośrednie w środowisku ASP.NET Core wymaga określonej semantyki, ale nie interfejsu?

public class FakeMiddleware 
{ 

} 

i zarejestrować go:

app.UseMiddleware<FakeMiddleware>(); 

i dostaniemy błąd wykonania. Oczywiście, jest to banalne i łatwe do znalezienia i naprawienia, ale jest zaimplementowane tak brutalnie, bez interfejsu?

Odpowiedz

16

Metoda Invoke jest elastyczna i można poprosić o dodatkowe parametry. ASP.NET wprowadzi dodatkowe parametry za pomocą konfiguracji usługi aplikacji.

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

Definicje interfejsu C# nie mogą zapewnić tej elastyczności w przyjemny sposób.

+0

, więc z DI możemy myśleć o interfejsach wad w aktualnej "wersji"? :) Ponieważ ta sytuacja (z dodatkowymi parametrami i rozwiązywaniem go automatycznie) może być bardziej rozproszona niż to miejsce –

+0

Och, gosh, to powinien być konstruktor wstrzyknięty. Jeśli jest to zależność od żądania, to wzór fabryczny dobrze by działał – Rbjz