F# 类型提供程序是一个组件,它提供用于程序中的类型、属性和方法。 类型提供程序生成所谓的 “提供类型”,这些类型由 F# 编译器生成,并且基于外部数据源。
例如,适用于 SQL 的 F# 类型提供程序可以生成表示关系数据库中表和列的类型。 事实上,这是 SQLProvider 类型提供程序的作用。
提供的类型取决于类型提供程序的输入参数。 此类输入可以是示例数据源(例如 JSON 架构文件)、指向外部服务的 URL 或数据源的连接字符串。 类型提供程序还可以确保仅按需扩展类型组,也就是说,只有当程序实际引用这些类型时,它们才会被扩展。 这允许以强类型的方式直接按需集成大型信息空间(如联机数据市场)。
生成的和已擦除的类型提供程序
类型提供器有两种形式:生成式和擦除式。
生成类型提供程序会生成可作为 .NET 类型写入到生成它们的程序集中的类型。 这样,就可从其他程序集的代码中使用它们。 这意味着数据源的类型化表示形式通常必须是一种可用于表示 .NET 类型的表示形式。
擦除类型提供程序会生成只能在生成它们的程序集或项目中使用的类型。 类型为临时类型;也就是说,它们不会写入程序集,不能由其他程序集中的代码使用。 它们可包含延迟成员,让你能够使用从可能无限的信息空间提供的类型。 它们可用于使用一小部分大型和互连的数据源。
常用类型提供程序
下列广泛使用的库包含适合不同用途的类型提供程序:
- FSharp.Data 包括 JSON、XML、CSV 和 HTML 文档格式和资源的类型提供程序。
- SQLProvider 通过对象映射以及 F# 针对这些数据源的 LINQ 查询,提供对关系数据库的强类型访问。
- FSharp.Data.SqlClient 具有一组类型提供程序,用于在 F# 中对 T-SQL 进行编译时校验嵌入。
- Azure 存储类型提供程序 为 Azure Blob、表和队列提供类型,允许你访问这些资源,而无需在整个程序中将资源名称指定为字符串。
- FSharp.Data.GraphQL 包含 GraphQLProvider,它基于 URL 指定的 GraphQL 服务器提供类型。
如有必要,可以 创建自己的自定义类型提供程序,或引用其他人创建的类型提供程序。 例如,假设组织有一个数据服务,它提供大量且不断增长的命名数据集,每个数据集都有自己的稳定数据架构。 您可以选择创建一个类型提供程序,该程序读取架构并以强类型化方式将最新可用数据集呈现给程序员。