繁体   English   中英

在F#中使用绑定接口

[英]Using bound interface in F#

我试图在F#中使用C#库,所以这将是非常具体的情况。 我使用Servicestack和F#。 现在,我正在尝试使用接口使用方法连接类

RegisterAutoWiredAs<T,'TAs>()

签名。 这是'T有约束,它必须实现'TA。 它在C#代码中工作正常。

但是F#在使用界面时有限制。

let f:IFoo = Foo() // will give type error
let fi:IFoo - Foo() :> IFoo // will work

在这里,Foo实施了IFoo。 所以,这部分与C#等价物完全不同。 现在,如果我这样做,上面的签名就会给出类型错误

container.RegisterAutoWiredAs<Foo,IFoo>()

现在有了在给出参数的同时进行铸造。

这是我试图运行的原始项目的 此代码中的所有内容都与此部分不同,而且遗憾的是其他等效方法也失败了。

这是我在该项目中遇到的错误

该表达式预计具有“MemoryChatHistory”类型,但此处的类型为“IChatHistory”

F#不支持隐式接口实现。

我想你可以通过使IChatHistory成为一个抽象类而不是一个接口(使用[<AbstractClass>]属性)来解决这个问题。

编辑:

不,我今天有机会玩弄它。 我认为用F#中的那些类型参数直接调用这个方法是不可能的。 看到这个问题

如何将`where T:U`泛型类型参数约束从C#转换为F#?

再讨论一下。

您可以通过使用反射来调用该方法来解决此问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM