在 F# 中使用绑定接口
Using bound interface in F#
我正在尝试在 F# 中使用 C# 库,所以这将是非常具体的情况。我在 F# 中使用 Servicestack。现在,我正在尝试使用方法
将 class 与接口连接起来
RegisterAutoWiredAs<T,'TAs>()
签名。 这是 'T 具有必须实现 'TAs 的约束。 它在 C# 代码中运行良好。
但是 F# 在使用接口时有限制。
let f:IFoo = Foo() // will give type error
let fi:IFoo - Foo() :> IFoo // will work
这里Foo实现了IFoo。因此,这部分与 C# 等效部分完全不同。现在,如果我这样做,上面的签名会给出类型错误
container.RegisterAutoWiredAs<Foo,IFoo>()
并且无法在给参数的同时进行转换。
这是我正在尝试 运行 的原始项目中的 line。此代码中的所有内容除此部分外均有效,而且遗憾的是其他等效方法也失败了。
这是我在该项目中遇到的错误
This expression was expected to have type
'MemoryChatHistory' but here has type
'IChatHistory'
F# 不支持隐式接口实现。
我认为在这种情况下,您可以通过将 IChatHistory 设为抽象 class 而不是接口(使用 [<AbstractClass>]
属性)来解决此问题。
编辑:
不,我今天有机会玩它。我认为用 F# 中的那些类型参数直接调用此方法是不可能的。看到这个问题
How do I translate a `where T : U` generic type parameter constraint from C# to F#?
进行更多讨论。
您可以通过使用反射调用方法来解决这个问题。
我正在尝试在 F# 中使用 C# 库,所以这将是非常具体的情况。我在 F# 中使用 Servicestack。现在,我正在尝试使用方法
将 class 与接口连接起来RegisterAutoWiredAs<T,'TAs>()
签名。 这是 'T 具有必须实现 'TAs 的约束。 它在 C# 代码中运行良好。
但是 F# 在使用接口时有限制。
let f:IFoo = Foo() // will give type error
let fi:IFoo - Foo() :> IFoo // will work
这里Foo实现了IFoo。因此,这部分与 C# 等效部分完全不同。现在,如果我这样做,上面的签名会给出类型错误
container.RegisterAutoWiredAs<Foo,IFoo>()
并且无法在给参数的同时进行转换。
这是我正在尝试 运行 的原始项目中的 line。此代码中的所有内容除此部分外均有效,而且遗憾的是其他等效方法也失败了。
这是我在该项目中遇到的错误
This expression was expected to have type 'MemoryChatHistory' but here has type 'IChatHistory'
F# 不支持隐式接口实现。
我认为在这种情况下,您可以通过将 IChatHistory 设为抽象 class 而不是接口(使用 [<AbstractClass>]
属性)来解决此问题。
编辑:
不,我今天有机会玩它。我认为用 F# 中的那些类型参数直接调用此方法是不可能的。看到这个问题
How do I translate a `where T : U` generic type parameter constraint from C# to F#?
进行更多讨论。
您可以通过使用反射调用方法来解决这个问题。