gpt4 book ai didi

c# - 如何将此 C# 函数转换为 F# 函数

转载 作者:行者123 更新时间:2023-12-03 20:47:03 26 4
gpt4 key购买 nike

我正在将一些代码从 C# 传递到 F#,并且遇到了以下扩展方法,它添加了一些 mongo 设置。

public static class Container
{
public static IServiceCollection AddServicesFromInfrastructure(this IServiceCollection services, IConfiguration configuration)
{
services.Configure<MongoDBSettings>(configuration.GetSection(nameof(MongoDBSettings)));
services.AddSingleton<IMongoDBSettings>(sp => sp.GetRequiredService<IOptions<MongoDBSettings>>().Value);
return services;
}
}
我进行了以下转换,一切都很好,问题出在 AddSingleton 方法内部的 lambda 中。
module Extensions =    

type IServiceCollection with
member this.AddMongoDBConfiguration(configuration: IConfiguration) =
this.Configure<MongoDBSettings>(configuration.GetSection("MongoDBSettings")) |> ignore
this.AddSingleton<IMongoDBSettings>(fun sp -> sp.GetRequiredService<IOptions<MongoDBSettings>>().Value) |> ignore
this
此行返回错误:
方法“AddSingleton”没有重载匹配。
已知参数类型:(IServiceProvider -> MongoDBSettings)
this.AddSingleton<IMongoDBSettings>(fun sp -> sp.GetRequiredService<IOptions<MongoDBSettings>>().Value) |> ignore
将该 lambda 函数转换为 F# 的正确方法是什么?
感谢阅读,我是 F# 新手

最佳答案

尝试这样调用:

module Extensions =    

type IServiceCollection with
member this.AddMongoDBConfiguration(configuration: IConfiguration) =
this.Configure<MongoDBSettings>(configuration.GetSection("MongoDBSettings")) |> ignore
this.AddSingleton<IMongoDBSettings>(Func<_,_>(fun (sp: IServiceProvider) ->
sp.GetRequiredService<IOptions<MongoDBSettings>>().Value :> IMongoDBSettings)) |> ignore
this
所以你需要将 F# 函数转换为 System.Func (您还需要 open System 命名空间),注释参数类型( sp: IServiceProvider )并将结果向上转换到接口(interface) IMongoDBSettings通过使用 :>运算符,因为 F# 不会隐式执行此类转换。

关于c# - 如何将此 C# 函数转换为 F# 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65067689/

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