F# 使用F类型提供程序实例化类型并将其显示为属性

F# 使用F类型提供程序实例化类型并将其显示为属性,f#,type-providers,F#,Type Providers,我想做以下几点: 设allTypes=allTypes t,程序集 。。。其中AllTypes是一个类型提供程序,其属性是子类类型t的给定程序集中所有类型的实例。所有类型都有一个不带参数的构造函数 使用F类型提供程序是否可行?我没有创建自己的提供商的经验,如果不可行,我不想浪费时间尝试这样做 我非常感谢任何能让我开始编写此代码的页面链接。您不需要类型提供程序;您可以使用基本反射编写该代码: open System.Reflection let allTypes (baseClass : Typ

我想做以下几点:

设allTypes=allTypes t,程序集

。。。其中AllTypes是一个类型提供程序,其属性是子类类型t的给定程序集中所有类型的实例。所有类型都有一个不带参数的构造函数

使用F类型提供程序是否可行?我没有创建自己的提供商的经验,如果不可行,我不想浪费时间尝试这样做


我非常感谢任何能让我开始编写此代码的页面链接。

您不需要类型提供程序;您可以使用基本反射编写该代码:

open System.Reflection

let allTypes (baseClass : Type) (assemblies : Assembly seq) =
    assemblies
    |> Seq.collect (fun x -> x.GetExportedTypes())
    |> Seq.filter (fun x -> baseClass.IsAssignableFrom x)
    |> Seq.collect (fun x -> x.GetConstructors())
    |> Seq.filter (fun x -> x.GetParameters().Length = 0)
    |> Seq.map (fun x -> x.Invoke([||]))

allTypes函数有这样一个签名:Type->Assembly seq->obj seq。

github repo中有很多活动。有一个学习曲线,但调整到回购可能是有用的

除此之外,本简介还介绍了一些基础知识,下面是由F开源社区编写的一篇文章

网站,这涵盖了正在发生的事情的横截面,包括类型提供程序


您可以使用Mark在此建议的列表,并将其转换为类型提供程序。我认为一种探索性的与名称空间交互的方法会很有用。为什么不呢?我会用的。如果您有时间,请在GitHub上发布。

是的,我可以做类似的事情,事实上,我已经编写了这部分代码。问题是,我希望类型作为属性公开,以利用这些值的编译时解析。不必强制转换它们、Intellisense弹出窗口等。属性是什么意思?@MiloDC可能就是我,但我不清楚属性与派生自基类的对象列表的关系……与其说是返回对象列表的类的属性,不如想象每个对象有一个属性。有几个优点:异构类型、在编译时了解类型、Intellisense揭示、不必实例化它们等等。