在运行时确定ProvideMethod返回类型

时间:2014-01-20 21:35:36

标签: f# type-providers

我正在使用F#Type Provider函数来公开我的系统的整个数据。从用户检索查询字符串时,类型提供程序启动与远程服务器的连接,并将返回的DataTable解析为强类型数据。 目前,我遇到了像鸡蛋问题一样的问题。

ProvideMethod可以像这样初始化:

let queryParam = ProvidedParameter("queryString", typeof<string>)
let method = ProvidedMethod("Query", [queryParam], returnType,
                            InvokeCode = (fun args -> <@@ .. @@>))

我需要在声明此方法时声明返回数据的类型。但是,当我有查询字符串并获取该DataTable的列元数据并创建另一个的ProvideTypeDefinition,然后为每列填充相应的ProvideProperty时,我只能确定这种类型。

所以我的问题是,有什么方法可以解决这个问题吗?以下任何一种方法都可以吗?

  • 为返回类型设置一个占位符,并在InvokeCode中替换此类型(我不知道我们是否可以在F#中执行此操作)
  • 从queryParam检索查询字符串并创建该类型,然后将类型作为ProvideMethod参数传递

如果没有,请建议四处走动。

1 个答案:

答案 0 :(得分:1)

这不是类型提供程序的工作方式 - 假设方法不能具有根据输入值而变化的返回类型。

但是,您可以执行的操作是将查询字符串用作类型提供程序本身的静态参数,然后使用取决于编译时参数的签名公开方法。许多记录在案的示例都使用了这种技术(例如,参见标题为“使用静态参数的类型提供程序”here)的部分。