c# - 如何将此 C# 函数转换为 F# 函数
问题描述
我正在将一些代码从 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
将结果向上转换为接口,因为F#没有隐式地进行这种转换。IMongoDBSettings
:>
推荐阅读
- c - 访问结构并增加它
- ubuntu-18.04 - 为什么我的 Mosquitto 代理无法在启动时启动,但在手动启动时工作?
- c# - 在 Unity 中重命名序列化的自动属性
- angular - 如何在模板中键入检查 Angular Directive 输入分配类型?
- windows - 启动 Windows docker 容器时执行 .bat 脚本
- php - 我无法从数据库中获取信息,从而无法在下拉列表中的一行上端到端显示
- javascript - 使表单更新在 vue 中更简洁
- matplotlib - 为子图设置一个公共颜色条
- css - 为什么 CSS 动画不会淡出?
- amazon-web-services - 为什么 AWS EMR 需要 2 个不同的安全组用于主节点和核心/任务节点?