绑定对象数组时如何配置服务?

时间:2017-06-30 20:18:59

标签: c# asp.net-core

我有一个附加到VCAP_SERVICES环境变量的json字符串,如下所示:

{
"redislabs": [
    {
        "credentials": {
            "host": "redis-1756.pcfredissb2.com",
            "ip_list": [
                "10.999.46.999"
            ],
            "password": "cz(2u",
            "port": 1756
        },
        "syslog_drain_url": null,
        "volume_mounts": [],
        "label": "redislabs",
        "provider": null,
        "plan": "simple-redis",
        "name": "sdsredis2",
        "tags": [
            "redislabs"
        ]
    },
    {
        "credentials": {
            "host": "redis-13610.pcfredis.com",
            "ip_list": [
                "10.999.46.9999"
            ],
            "password": "n-C*",
            "port": 13610
        },
        "syslog_drain_url": null,
        "volume_mounts": [],
        "label": "redislabs",
        "provider": null,
        "plan": "simple-redis",
        "name": "sdsredis",
        "tags": [
            "redislabs"
        ]
    }
]
}

ConfigureServices的{​​{1}}中,当我运行Startup.cs时,我得到的内容如下:

enter image description here

我有一些看起来像这样的选项:

Configuration.GetSection("redislabs").AsEnumerable()

我的问题是如何在这样的事情上执行绑定?是否可以绑定一个对象数组?

我试过了:

public class RedisLabs
{
    public RedisLab[] redislabs { get; set; }
}

public class RedisLab
{
    public Credentials credentials { get; set; }
    public object syslog_drain_url { get; set; }
    public object[] volume_mounts { get; set; }
    public string label { get; set; }
    public object provider { get; set; }
    public string plan { get; set; }
    public string name { get; set; }
    public string[] tags { get; set; }
}

public class Credentials
{
    public string host { get; set; }
    public string[] ip_list { get; set; }
    public string password { get; set; }
    public int port { get; set; }
}

var redislabs = new List<RedisLab>();
Configuration.GetSection("redislabs").Bind(redislabs);

以及其他一些方法。似乎没什么用。

Halp,plz。

1 个答案:

答案 0 :(得分:0)

鉴于您的json文件和类,这应该可行(将顶级部分绑定到包含该数组的类的实例):

var redisLabs = new RedisLabs();
Configuration.Bind(redisLabs);

这也有效:

services.Configure<RedisLabs>(Configuration);
...
var rlOptions = app.ApplicationServices.GetRequiredService<IOptions<RedisLabs>>();
var redisLabs = rlOptions.Value;