2017-06-12 66 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方法的签名中。方法可以接受由 依赖注入填充的其他参数。

相关问题