Vì vậy, tôi có đoạn mã sau trong C#:C# chức năng sử dụng chức năng mở rộng nhưng VB tương đương không?
public Container ConfigureSimpleInjector(IAppBuilder app)
{
var container = new Container();
container.Options.DefaultScopedLifestyle = new AsyncScopedLifestyle();
container.RegisterPackages();
app.Use(async (context, next) =>
{
using (AsyncScopedLifestyle.BeginScope(container))
{
await next();
}
});
container.Verify();
return container;
}
Các app.Use()
được định nghĩa là Owin.AppBuilderUserExtensions.Use()
và trông như thế này:
public static IAppBuilder Use(this IAppBuilder app, Func<IOwinContext, Func<Task>, Task> handler);
VB tương đương như sau:
Public Function ConfigureSimpleInjector(app As IAppBuilder) As Container
Dim container = New Container()
container.Options.DefaultScopedLifestyle = New AsyncScopedLifestyle()
container.RegisterPackages()
app.Use(Async Sub(context, [next])
Using AsyncScopedLifestyle.BeginScope(container)
Await [next]()
End Using
End Sub)
container.Verify()
Return container
End Function
Vì một số lý do, trong phiên bản VB, app.Use()
không sử dụng chức năng mở rộng đó là có sẵn và chỉ cần sử dụng IAppBuilder.Use()
thay vào đó, như sau:
Function Use(middleware As Object, ParamArray args() As Object) As IAppBuilder
Tại sao mã VB không sử dụng chức năng mở rộng giống như C# làm và làm thế nào tôi có thể làm cho nó sử dụng ?
Chỉnh sửa
Để rõ ràng, các phương pháp mở rộng không phải là của riêng tôi. Họ đến từ thư viện của Owin 3rd. Vì vậy, không có tùy chọn đổi tên các phương thức mở rộng.
Sẽ tạo sự khác biệt nếu bạn sử dụng 'Func' thay cho' Sub' trong 'app.Use (Async ...'? – pasty
Tôi tin rằng không, bởi vì theo như tôi biết, nó không phải trả lại một giá trị. Tôi có nghĩa là sử dụng 'Chức năng' thay vì ném một lỗi, bởi vì sau đó của nó –
IMO nó nên.Để sử dụng một phương pháp overriden, chữ ký phải phù hợp. Hãy xem [định nghĩa] (https://msdn.microsoft.com/en-us/library/owin. appbuilderuseextensions.use (v = vs.113) .aspx? cs-save-lang = 1 & cs-lang = vb # code-snippet-1) Nếu không, trình biên dịch biết, bạn muốn gọi chính xác phương thức này như thế nào? Hiện tại Sub nó được xem như một tham số (và do đó định nghĩa phương thức đầu tiên được sử dụng). Làm thế nào để bạn bây giờ (bạn có thể xác minh) trong phiên bản C#, nó gọi phương thức với tham số Func? – pasty