gpt4 book ai didi

c# - 在 ASP.NET Core 中创建具有依赖关系的中间件函数

转载 作者:太空宇宙 更新时间:2023-11-03 23:06:04 25 4
gpt4 key购买 nike

我正在使用 ASP.NET Core v1.1 创建 WebSocket 服务器。这是我的 Startup.cs 的精简版:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
// ...

// route of "/ws" requests
app.Map("/ws", Map);
}


public void ConfigureServices(IServiceCollection services)
{
// add the db service
services.AddDbContext<ArticleContext>(
opts => opts.UseNpgsql("MyConnectionString")
);
}

private void Map(IApplicationBuilder app)
{
app.UseWebSockets();
app.Use(Acceptor);
}

private async Task Acceptor(HttpContext httpContext, Func<Task> next)
{
// Handle the request using: httpContext.WebSockets.IsWebSocketRequest
// ...
}

如您所见,我正在使用 Acceptor 任务来处理网络套接字请求。我还在 ConfigureServices 方法中添加了一个 DbContext

我没有添加任何 MVC 功能,因为我没有使用它。但我需要访问 ArticleContext 才能连接到我的数据库。

我看到的所有示例都使用了 MVC 包附带的 Controller。在这样的 Controller 中,您可以使用构造函数依赖注入(inject)来注入(inject) DBContext

我不使用 Controller,而是使用 Acceptor 方法,那么如何获得 ArticleContext 实例呢?

我是否必须以某种方式编写一个 MyAcceptor 类并通过 app.Use() 而不是使用 app.Map 将其添加到应用中> 能够注入(inject)依赖项? .. 只是一个猜测。

最佳答案

您必须从 HttpContext.RequestServices 属性中解析 ArticleContext,如下所示:

private async Task Acceptor(HttpContext httpContext, Func<Task> next)
{
var context = httpContext.RequestServices.GetRequiredService<ArticleContext>();
// Handle the request using: httpContext.WebSockets.IsWebSocketRequest
// ...
}

您还可以将 Acceptor 方法包装到它自己的类中。在这种情况下,您可以将 ArticleContext 注入(inject)到该 AcceptorMiddleware 类的构造函数中,但这在您的情况下似乎并不需要。

关于c# - 在 ASP.NET Core 中创建具有依赖关系的中间件函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41124925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com