相当愚蠢的问题,但我似乎找不到正确的术语,所以我所有的搜索都失败了。
我有以下C#方法调用链:
container.Register(Component.For<IMyInterface>().ImplementedBy<MyClass>().Named("MyInstance").LifeStyleSingleton);
如何在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)
但肯定必须有一些其他更好的方法来构建这样的电话。否?
加成
早期的答案让我找到了一个有效的解决方案(我删除了ignore
的所有提及,因为它无关紧要,只让读者感到困惑):
container.Register (Component.For<IMyInterface>().ImplementedBy<MyClass>().Named("MyInstance").LifestyleSingleton())
但是,有一条回复声明这应该有效:
container.Register <| Component.For<IMyInterface>().ImplementedBy<MyClass>().Named("MyInstance").LifestyleSingleton()
但事实并非如此。后一部分,即<|
之后的表达式,会生成类型错误
此表达式应具有类型单位,但此处的类型为ComponentRegistration&lt; IMyInterface&gt;。
答案 0 :(得分:6)
你可以在F#中做同样的事情:
container.Register <|
Component
.For<IMyInterface>()
.ImplementedBy<MyClass>()
.Named("My Instance")
.LifeStyleSingleton()
这里添加了一些糖(<|
)。你可以将调用放在一行上,或者像我刚才那样(我更喜欢它,因为它很好地反映了F#流水线)。要记住的一点是,参数需要用括号括起来,并且函数名和parens之间没有空格(非常多&#34; C#style&#34;)。