2016-11-30 19 views
12

Như đã biết, IApplicationBuilder của phương thức Configure (class Startup) trong ASP.NET Core yêu cầu ngữ nghĩa cụ thể (để có phương thức 'Invoke' với tham số đầu vào của kiểu HttpContext và Task làm giá trị trả về). Nhưng tại sao nó không được thực hiện như giao diện? Tôi có thể viết một cái gì đó giống như nó:Tại sao phần mềm trung gian trong ASP.NET Core yêu cầu ngữ nghĩa cụ thể, nhưng không phải là giao diện?

public class FakeMiddleware 
{ 

} 

và đăng ký nó:

app.UseMiddleware<FakeMiddleware>(); 

và chúng tôi sẽ nhận được một lỗi runtime. Tất nhiên, đó là điều tầm thường và dễ dàng được tìm thấy và sửa chữa, nhưng nó thực hiện rất thô, không có giao diện?

Trả lời

16

Phương thức Gọi là linh hoạt và bạn có thể yêu cầu tham số bổ sung. ASP.NET sẽ tiêm các tham số bổ sung bằng cách sử dụng cấu hình dịch vụ của ứng dụng.

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

C# định nghĩa giao diện không thể cung cấp sự linh hoạt này một cách tốt đẹp.

+0

vì vậy, với DI chúng ta có thể suy nghĩ về các giao diện bất lợi trong "phiên bản" hiện tại? :) Bởi vì tình trạng này (với các thông số bổ sung và giải quyết nó tự động) có thể được phân phối nhiều hơn nơi này –

+0

Oh gosh, mà nên được xây dựng tiêm. Nếu đó là phụ thuộc theo yêu cầu thì mẫu nhà máy sẽ hoạt động độc đáo – Rbjz

Các vấn đề liên quan