将C#对象方法链接转换为F#

Mag*_*nus 3 c# f#

相当愚蠢的问题,但我似乎找不到正确的术语,所以我所有的搜索都失败了.

我有以下C#方法调用链:

container.Register(Component.For<IMyInterface>().ImplementedBy<MyClass>().Named("MyInstance").LifeStyleSingleton);
Run Code Online (Sandbox Code Playgroud)

如何在F#中编写相同的内容?

我可以做这个:

let f0 = Component.For<IMyInterface> () in
let f1 = f0.ImplementedBy<MyClass> () in
let f2 = f1.Named "MyInstance" in
let f3 = f2.LifestyleSingleton () in
ignore (container.Register f3)
Run Code Online (Sandbox Code Playgroud)

但肯定有一些其他更好的方式来构建这样的呼叫.没有?

加成

早期的答案让我找到了一个有效的解决方案(我已经删除了所有提及,ignore因为它无关紧要,只会让读者感到困惑):

container.Register (Component.For<IMyInterface>().ImplementedBy<MyClass>().Named("MyInstance").LifestyleSingleton())
Run Code Online (Sandbox Code Playgroud)

但是,一个回复说明这应该有效:

container.Register <| Component.For<IMyInterface>().ImplementedBy<MyClass>().Named("MyInstance").LifestyleSingleton()
Run Code Online (Sandbox Code Playgroud)

但事实并非如此.后一部分,后面的表达式<|,会产生类型错误

该表达式应该具有类型单元,但这里有类型ComponentRegistration <IMyInterface>.

scr*_*wtp 6

你可以在F#中做同样的事情:

container.Register <|
    Component
        .For<IMyInterface>()
        .ImplementedBy<MyClass>()
        .Named("My Instance")
        .LifeStyleSingleton()
Run Code Online (Sandbox Code Playgroud)

这里添加一些糖(<|).你可以将调用放在一行上,或者像我刚才那样(我更喜欢它,因为它很好地反映了F#流水线).要记住的一件事是,参数需要加括号,并且函数名和parens之间没有空格(几乎是"C#style").