2016-11-30 36 views
12

Bilindiği üzere, ASP.NET Çekirdeğinde Configure (sınıf Başlatma) yönteminin IApplicationBuilder özelliği, belirli semantiklerin (HttpContext türünde girdi parametresiyle 'Invoke' yöntemine sahip olması ve Dönüş değeri olarak Görev'i gerektirir) gerektirir. Ama neden arayüz olarak uygulanmadı?ASP.NET Çekirdeğinde ara katman yazılımı neden belirli bir semantik gerektirir, ancak bir arabirim gerektirmiyor?

public class FakeMiddleware 
{ 

} 

ve kaydetmek: Böyle bir şey yazabilirsiniz

app.UseMiddleware<FakeMiddleware>(); 

ve biz bir çalışma zamanı hatası alırsınız. Tabii ki, bu önemsiz şey ve bulunması ve düzeltilmesi kolay, ama arayüzsüz, bu kadar zor uygulandı?

cevap

16

Invoke yöntemi esnektir ve ek parametreler isteyebilirsiniz. ASP.NET, uygulamanın servis yapılandırmasını kullanarak ek parametreleri enjekte edecektir.

public async Task Invoke(HttpContext ctx, 
         IHostingEnvironment host, 
         ISomethingElse service) 
{ 
    // ... 
} 
C# arabirimi tanımları bu esnekliği güzel bir şekilde sağlayamaz.
+0

, DI ile mevcut "sürüm" dezavantajları arayüzleri hakkında düşünebiliriz? :) Çünkü bu durum (ek parametrelerle ve otomatik olarak çözülerek) bu yerden –

+0

Oh gosh daha dağıtılabilir, bu yapıcı enjekte edilmelidir. İstek başına bir bağımlılık ise, o zaman bir fabrika kalıbı güzel çalışır – Rbjz

İlgili konular