.net core 用于加载.NET插件的内部类型

.net core 用于加载.NET插件的内部类型,.net-core,plugins,f#,.net Core,Plugins,F#,我正在为我的F#.NET5应用程序开发一个插件加载系统,如下所示。我想提供一个接口ICore,该接口将具有一些内部的不透明状态类型,我将提供一个用于操作的接口 在Scala中,我可能会这样做 trait-ICore{ 类型状态 def重置:状态 } 然后像这样调用这个方法 def resetCoreState(c:Core):c.State=c.reset 并实现一个类似于 对象StringCore扩展了ICore{ 覆盖类型状态=字符串 覆盖def重置:字符串=“” } 但是F#没有这个

我正在为我的F#.NET5应用程序开发一个插件加载系统,如下所示。我想提供一个接口
ICore
,该接口将具有一些内部的不透明状态类型,我将提供一个用于操作的接口

在Scala中,我可能会这样做

trait-ICore{
类型状态
def重置:状态
}
然后像这样调用这个方法

def resetCoreState(c:Core):c.State=c.reset
并实现一个类似于

对象StringCore扩展了ICore{
覆盖类型状态=字符串
覆盖def重置:字符串=“”
}
但是F#没有这个功能

我应该如何设计我的界面

类型ICore()=
接口
//抽象类型状态
抽象方法重置:状态
结束
让我们说明:???
键入StringCore()=???

这样插件就可以管理自己的状态了?

我不认为有任何简单的方法可以使状态类型不透明,但下面是我将如何在F#中定义这些类型:


Scala中的ICore
def
类型就像F#中的
let
c.State
是一种返回类型。因此,F#等价物类似于
let resetCoreState:“state=core.Reset
Ah,好的。那么我的答案的上半部分就适用了。我对它进行了相应的编辑。
type ICore<'state> =
    abstract member Reset : 'state

type StringCore() =
    interface ICore<string> with
        member __.Reset = ""

let resetCoreState (core : ICore<_>) =
    core.Reset