Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# 将用户名和密码参数传递给类型提供程序_F#_Type Providers - Fatal编程技术网

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

F# 将用户名和密码参数传递给类型提供程序,f#,type-providers,F#,Type Providers,我已经为需要通过用户名和密码进行身份验证的服务创建了一个类型提供程序。创建类型化实例的签名如下所示: let tbl = new DemoTable<TableId="demo",User="user",Password="password">() 让tbl=新的可降级() 这一切都很好,唯一的问题是我想演示这段代码,所以我希望用户名和密码来自其他一些来源——配置文件、另一个F#module(使用脚本时的好方法)等等。 我可以选择哪些选项来传递这些参数,以便在演示过程中不公开这些

我已经为需要通过用户名和密码进行身份验证的服务创建了一个类型提供程序。创建类型化实例的签名如下所示:

let tbl = new DemoTable<TableId="demo",User="user",Password="password">()
让tbl=新的可降级()
这一切都很好,唯一的问题是我想演示这段代码,所以我希望用户名和密码来自其他一些来源——配置文件、另一个F#module(使用脚本时的好方法)等等。
我可以选择哪些选项来传递这些参数,以便在演示过程中不公开这些参数?

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

在交互式脚本场景中,直接将用户名和密码指定为静态参数肯定很有用。但正如您所说的,有时将它们保存在单独的配置文件中也很有用。F#没有任何库可以简化这一过程,但您可以实现与提供这两个选项的
SqlDataConnection
类型提供程序相同的模式(请参阅)

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

type DB = SqlDataConnection<ConnectionString="Source=.; User=me; Password=mysecret">
type DB=SqlDataConnection
或者可以指定本地配置文件和密钥名称:

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

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

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

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

    [<Literal>]
    let pwd = "password here"
模块MyInfo=
[]
让user=“此处的用户名”
[]
让pwd=“此处输入密码”
然后在您显示的文件中:

let tbl = new DemoTable<TableId="demo",User=MyInfo.user,Password=MyInfo.pwd>()
让tbl=新的可降级()

如果我使用连接字符串模式,我仍然会公开密码。我无法编写SqlDataConnection()。。。配置也不理想-如果我使用脚本,则没有配置。您仍然可以在脚本场景中使用配置文件-标准SQL类型提供程序只是在脚本文件所在的同一文件夹中查找指定名称的配置文件。您可以对类型提供程序执行相同的操作。(但是你仍然需要有配置文件,所以密码仍然存储在某处。)+1这是一个很好的技巧!我认为这与使用配置文件之间的主要区别在于,如果您使用它,名称和密码实际上将在编译后的二进制文件中(而如果您使用配置文件,则不会在那里)。这在某些部署场景中可能很重要,但在脚本情况下可能不重要。