UseEnpoints with MapHub returns 需要单位但类型为 HubEndpointConversationBuilder

UseEnpoints with MapHub returns expects unit but has type HubEndpointConversationBuilder

我正在尝试使用 F# 试用 SignalR 并创建一个简单的聊天(教程无处不在)

但是当我添加

.UseEndpoints(fun routes -> routes.MapHub<ChatHub>("/chathub"))

到我的 configureApp 我收到错误

UseEnpoints with MapHub returns expects unit but has type HubEndpointConversationBuilder

我一直在研究的所有示例都在使用这样的函数。 有什么想法吗?

使用.NetCore 3.1 ChatHub 功能如下所示。

type ChatHub() =
  inherit Hub()
  member x.SendMessage user msg =
    task {
      do! x.Clients.All.SendAsync("ReceiveMessage", user, msg)
    }
let configureApp (app : IApplicationBuilder) =
    let env = app.ApplicationServices.GetService<IHostEnvironment>()
    (match env.IsDevelopment() with
    | true  -> app.UseDeveloperExceptionPage()
    | false -> app.UseGiraffeErrorHandler errorHandler)
        .UseHttpsRedirection()
        .UseCors(configureCors)
        .UseStaticFiles()
  Error--->.UseEndpoints(fun routes -> routes.MapHub<ChatHub>("/chathub")) 
        .UseGiraffe(webApp)```

MapHub 是一个副作用操作,返回一个对象以进行进一步、流畅的配置。 UseEndpoints 但是什么都不期望,即 unit.

.UseEndpoints(fun routes -> routes.MapHub<ChatHub>("/chathub") |> ignore)

应该解决这个问题。 'fix' 通常需要将 OO 副作用世界粘合到功能世界中。当心巨龙:

.UseEndpoints(fun routes -> routes.MapHub<ChatHub> |> ignore)

将愉快地编译,但可能不会按预期进行。