如果我使用F# Type Providers来自FSharp.Data.TypeProviders 4.3.0.0的程序集,我可以在一个非常简单的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<br>type PhoneNumberRegEx = CheckedRegexProvider< @"(?<AreaCode>^\d{3})-(?<PhoneNumber>\d{3}-\d{4}$)">
open Samples.FSharp.MiniCsvProvider<br>type csv = MiniCsvProvider<"a.csv">
它最后是在2011年3月发布的,我的猜测是它们还没有反映出随Visual Studio 2012一起发货的type provider的最终版本。
F# Type Providers看起来是一项伟大的技术,但我们需要帮助来构建它们。任何帮助都将不胜感激。