6

F# Type Providers 上的 MSDN 页面

F# 类型提供程序是一个组件,它提供在您的程序中使用的类型、属性和方法。

所以它就像一个.NET 类库?有什么区别?和:

手动编写这些类型非常耗时且难以维护。

类型提供程序会自动编写自己吗?还有更多:

类似地,WSDL Web 服务的类型提供者将提供直接使用任何 WSDL Web 服务所需的类型、属性和方法。

有用于从 WSDL URL 生成类型的实用程序,这里类型提供程序提供的优势又是什么?

我的第一个想法是 F# 类型提供程序在运行时提供类型,例如 .NET 远程处理,但似乎并非如此。使用它们有什么好处?

4

2 回答 2

13

在许多方面,代码生成是类型提供者的自然比较。但是,类型提供程序具有代码生成缺乏的几个理想属性:

  • 类型提供程序可以在 F# 脚本中使用,而无需进行上下文切换。使用代码生成器,您必须调用生成器、引用代码等。使用类型提供程序,您可以引用类型提供程序程序集(就像引用任何其他 F#/.NET 程序集一样),然后使用提供的类型马上。这确实是交互式脚本的游戏规则改变者。
  • 正如 Gustavo 所提到的,擦除类型允许类型提供者处理传统代码生成会生成太多代码的情况(例如,Freebase 有数千种类型,这对于类型提供者来说没有问题)。
  • 类型提供程序可以支持失效,因此如果数据源发生更改,编译器将立即重新检查文件。
  • 同样,使用代码生成器,生成的代码可能与数据源不同步;类型提供程序可以防止发生此问题,每次编译程序时检查数据源(尽管许多类型提供程序还提供了使用缓存模式的选项以方便使用)。
  • 类型提供者可以说更容易实现,尽管它可能取决于场景和作者的背景。
于 2013-10-16T14:49:02.173 回答
11

您可以使用代码生成工具从 WSDL 或 DB 生成类型,这些工具已集成到 Visual Studio 中。类型提供程序基本相同,但将该过程直接集成到编译中。这样,您无需担心架构更改时重新生成类型。

此外,类型提供程序支持使用已擦除类型执行此操作,这些类型是实际上并不存在的“虚拟”类型。这意味着不是生成 500 种类型和一个大程序集,而是只生成实际使用的内容,这意味着更小的程序集并支持导入巨大的递归模式,如 Freebase

于 2013-10-16T13:59:01.850 回答