簡體   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