最佳实践是在一个地方“注册”http客户端,以便可以从这个Elmish更新功能中重用它?而不必为每个请求创建它。
let update message model =
match message with
| SetMessage s -> { model with x = s }
| Loading -> { model with x = "Doing something long ..." }
let handleClick model dispatch _ =
dispatch Loading
async {
let url = Uri "https://api.github.com"
-- FIXME: too expensive to do this on per-update basis
use httpClient = new HttpClient(BaseAddress = url)
let! resp = httpClient.GetAsync "/users/srid" |> Async.AwaitTask
let! s = resp.Content.ReadAsStringAsync() |> Async.AwaitTask
dispatch (SetMessage s)
} |> Async.Start
我觉得这通常会出现在 Startup.fs 中。我使用仅限客户端的 Bolero Web 应用程序,因此如下所示:
builder.Services.AddSingleton<HttpClient>(new HttpClient (BaseAddress=apiBase))
但是问题就变成了......我如何从我的 F# 程序中访问它?什么是惯用方式?