2017-06-12 85 views
2

我需要將一些數據傳遞到ASP NET CORE中間件如何將原始數據傳遞給asp.net核心中間件

如果這是一個字符串列表,你是否使用與傳遞服務相同的機制?

例如將它作爲參數添加到Invoke方法中並將其註冊到DI?

如果是這樣,你如何做原始類型的註冊?例如一串串。它必須是一個命名類型或類似的東西?

或者我們可以通過其他方式傳遞數據嗎?

感謝

回答

3

讓我們假設我們有一箇中間件:

​​

只是傳遞一個列表UseMiddleware調用來解決它每中間件

app.UseMiddleware<FooMiddleware>(new List<string>()); 

您可以創建一個DTO並通過它:

public FooMiddleware(RequestDelegate next, Payload payload) 
.... 
app.UseMiddleware<FooMiddleware>(new Payload());  

或註冊這個DTO在DI容器,它將在中間件來解決:

public void ConfigureServices(IServiceCollection services) 
{ 
    services.AddSingleton<Payload>(new Payload()); 
} 

另外,DI容器允許解決每個請求依賴性:

public async Task Invoke(HttpContext httpContext, IMyScopedService svc) 
{ 
    svc.MyProperty = 1000; 
    await _next(httpContext); 
} 

Documentation:

因爲中間件是在app startu構建的p,不是每個請求, 範圍中間件構造函數使用的生命期服務在每個請求期間不與其他依賴注入類型共享。如果 您必須在您的中間件和其他 類型之間共享範圍的服務,請將這些服務添加到Invoke方法的簽名中。方法可以接受由 依賴注入填充的其他參數。

相關問題