我想做到以下几点:使用F#类型提供实例类型,并提供它们的属性
let allTypes = AllTypes (t, assemblies)
...其中AllTypes
是一种类型的供应商,其性质是实例类型为t
的子类的给定数组中的所有类型。 (所有类型都有一个不带参数的构造函数。)
这是可以使用F#类型提供程序吗?我没有创建自己的提供者的经验,如果不可行,我不想浪费我的时间来尝试这样做。
我非常感谢任何链接到页面,让我开始编码。
我想做到以下几点:使用F#类型提供实例类型,并提供它们的属性
let allTypes = AllTypes (t, assemblies)
...其中AllTypes
是一种类型的供应商,其性质是实例类型为t
的子类的给定数组中的所有类型。 (所有类型都有一个不带参数的构造函数。)
这是可以使用F#类型提供程序吗?我没有创建自己的提供者的经验,如果不可行,我不想浪费我的时间来尝试这样做。
我非常感谢任何链接到页面,让我开始编码。
在FSharp.Data github回购中有很多活动正在进行。有一条学习曲线,但调整到回购可能是有用的。
除此之外,这个介绍tutorial涵盖了一些基本知识,这里有一个由F#开源社区准备的Type Provider starter pack。
fsharp.org网站和此projects page涵盖了正在发生的事情(包括类型提供程序)的横截面。
你可以把马克在这里建议的列表中,并把它变成一个类型的提供者。我认为与命名空间交互的一种探索性方式将会很有用。为什么不?我会用它。如果你接近它,请在GitHub上发布。
你不需要类型提供者;您可以使用基本反映编写代码:
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
。
是的,我可以做这样的事情(事实上,我已经写了这部分代码)。 事情是,我希望类型被暴露为*属性*,以利用这些值的编译时解析。 (无需施放它们,智能感知弹出窗口等) – MiloDC 2014-10-10 23:40:22
*属性*是什么意思? – 2014-10-11 03:50:40
C#属性:http://msdn.microsoft.com/en-us/library/x9fsa0sw.aspx – MiloDC 2014-10-11 19:58:59