2016-11-08 142 views
1

在ASP.Net Core中,可以使用IOptions<T>将配置值注入类中。ASP.Net核心注入设置

所以,如果我有以下appsettings.json配置:

{ 
    "CustomSection": { 
    "Foo": "Bar" 
    }, 
    "RootUrl": "http://localhost:12345/" 
} 

我可以注入IOptions<CustomSection>到我的构造函数(假设我已经定义了一个CustomSection类)和阅读Foo属性。

如何将RootUrl设置注入到我的构造函数中或者不支持?

+0

你不能构建一类'RootUrl' – Daniel

+0

你应该[不要注入IOptions 到你的构造函数中](https://github.com/simpleinjector/SimpleInjector/issues/143#issuecomment-155029876)。 – Steven

回答

1

从文档 Using options and configuration objects不可能

选项图案使得能够使用定制选项类来表示一组相关的设置。一个类需要为每个设置和一个没有使用任何参数的构造函数(例如默认构造函数)拥有一个公共读写属性,以便用作选项类。

这意味着您需要生成一个类来读取它的配置值。但在你的样本RootUrl不能通过一个类来构造。

4

创建一个类,如下

public class AppSettings { 
    public string RootUrl{ get; set; } 
} 

注入到你的startup.cs如下。

public void ConfigureServices(IServiceCollection services) 
{ 
    services.Configure<AppSettings>(Configuration.GetSection("AppSettings")); 
} 

并在您的控制器中使用它如下。

public CustomerController(IOptions<AppSettings> appSettings) 
{ 
    [variable] = appSettings.Value; 
} 

让我知道这是否适合你。

+0

没有,因为在配置文件中没有称为'AppSettings'的部分不起作用。 –

+0

@KaiG你可以使用RootUrl,试试吧。 – jkyadav

+0

不,当您尝试使用设置时会引发异常,因为它无法将字符串解析为预期的格式。我相信上面接受的答案是正确的 - 它不被支持。 –