如果我使用程序集 FSharp.Data.TypeProviders 4.3.0.0 中的 F# 类型提供程序,我可以在一个非常简单的 F# 库中创建类型。然后我可以使用这些类型而不依赖于程序集 FSharp.Data.TypeProviders。那是相当甜蜜的!这是一个例子:
我创建了一个名为 TryTypeProviders 的 F# 库项目。我把它放在.fs中:
module TryTypeProviders
type Northwind = Microsoft.FSharp.Data.TypeProviders.ODataService
然后我可以使用 C# 项目中的 F# 库:
public static void Main()
{
var c = new TryTypeProviders.Northwind();
foreach (var cust in c.Customers)
Console.WriteLine("Customer is: " + cust.ContactName);
Console.ReadKey(true);
}
我还没有找到任何关于如何创建这样的类型提供程序的工作示例。FSharpx.TypeProviders 中的类型提供程序无法从 C# 访问。我的猜测是它们是擦除类型而不是生成类型。我仍然有点模糊哪个是哪个,但它在这里定义为:
- 生成的类型是嵌入到使用类型提供程序的程序集中的真实 .NET 类型(这是包装代码生成工具(如 sqlmetal)使用的类型提供程序)
- 擦除类型是在编译代码时由其他类型表示的模拟类型。
MSDN教程中提到的F# 3.0 示例包中的示例不适用于我。它们构建,但是当我尝试使用它们时,我得到了错误。
open Samples.FSharp.RegexTypeProvider
type PhoneNumberRegEx = CheckedRegexProvider< @"(?<AreaCode>^\d{3})-(?<PhoneNumber>\d{3}-\d{4}$)">
open Samples.FSharp.MiniCsvProvider
type csv = MiniCsvProvider<"a.csv">
它最后一次发布是在 2011 年 3 月,我的猜测是它们还没有反映 Visual Studio 2012 附带的类型提供程序的最终版本。
F# Type Providers 看起来是一项很棒的技术,但我们需要帮助来构建它们。任何帮助表示赞赏。