2017-08-08 99 views
0

我有以下值appsettings.json在.netCore控制台应用程序

{ 
    "MailOptions": 
    { 
    "Username": "ruskin", 
    "Password": "password" 
    } 
} 

当我通过ConfigurationBuilder读它,我只能通过configuration["MailSettings:Username"]访问值的appsettings.json文件。我想抓住整个MailOptions字符串,无论如何要这样做?我不想使用Json来解析文件等...我想坚持配置生成器。

我期望configuration.GetSection("MailOptions")能够正常工作吗?它只是返回null

我已经试过

SomeSection aSection = new SomeSection(); 
ServiceCollection serviceCollection = new ServiceCollection(); 
serviceCollection.Configure<SomeSection>(options => configuration.GetSection("SomeSection").Bind(aSection)); 
var someSection = serviceCollection.BuildServiceProvider().GetService<IOptions<SomeSection>>(); 

// aSection is instantiated but no values in it 
// someSection is null 

我appsettings.json

{ 
    "SomeSection": { 
    "UserName": "ruskin", 
    "Password": "dantra" 
    } 
} 

我的POCO类

public class SomeSection 
{ 
    public string UserName { get; set; } 
    public string Password { get; set; } 
} 
+0

这篇关于“ASP.NET Core中的强类型配置设置”的好文章提供了如何在.NET Core中使用设置的清晰示例https://weblog.west-wind.com/posts/2016/may/ 23/strong-typed-configuration-settings-in-aspnet-core –

回答

1

配置框架是在底层的源类型的抽象。因此MailOptions:Username可能来自JSON,环境变量甚至INI文件 - 而配置系统甚至可以配置多个来源。如果需要一个JSON字符串来配置你的邮件库并且想要使用配置抽象,我建议创建一个类来保存这些设置并将它重新序列化为一个JSON字符串。

编辑:

使用configuration.GetSection("SomeSection").Get<SomeSection>()我可以成功地从应用程序获得POCO。见sample application

+0

不好意思,我尝试了所有这些,我的主要问题是我可以访问'appsettings.json'中的单个值,但是即使我有一个POCO序列化成...也许是一个代码示例,我无法将它序列化到一个类中?这只是一个.netcore控制台应用程序,而不是一个web应用程序btw – Ruskin

+0

看看我的编辑,我已添加更多信息 – Ruskin

+0

当我尝试'configuration.GetSection(“SomeSection”)。获取()'它适用于某些以你为榜样的理由。 –