将用户名和密码参数传递给类型提供程序

时间:2014-04-21 16:48:35

标签: f# type-providers

我为需要按用户名和密码进行身份验证的服务创建了一个类型提供程序。创建类型化实例的签名是这样的:

let tbl = new DemoTable<TableId="demo",User="user",Password="password">()

一切正常,唯一的问题是我想要演示这段代码,所以我希望用户名和密码来自其他一些来源 - 配置文件,另一个F#模块(使用时的好方法)脚本)等 我可以选择传递这些参数,以便在演示过程中不会公开这些参数吗?

3 个答案:

答案 0 :(得分:4)

直接将用户名和密码指定为静态参数在交互式脚本编制方案中非常有用。但正如您所说,有时将它们保存在单独的配置文件中也很有用。 F#不附带任何可以使这更容易的库,但是您可以实现相同的模式,例如SqlDataConnection类型提供程序,它提供两个选项(参见MSDN docs)。

您可以指定整个连接字符串:

type DB = SqlDataConnection<ConnectionString="Source=.; User=me; Password=mysecret">

或者可以指定本地配置文件和密钥名称:

type DB = SqlDataConnection<ConnectionStringName="LocalDb", ConfigFile="App.config">

这是您必须在类型提供程序中实现的内容,但它似乎是支持这两种方案的最佳方式。

答案 1 :(得分:4)

一种简单的方法是在未显示的文件中使用文字:

module MyInfo =
    [<Literal>]
    let user = "user name here"

    [<Literal>]
    let pwd = "password here"

然后在你确实显示的文件中:

let tbl = new DemoTable<TableId="demo",User=MyInfo.user,Password=MyInfo.pwd>()

答案 2 :(得分:0)

更改数据库密码(或建立临时用户) - &gt;编译项目 - >重新更改密码(或删除用户)。