public class Bar
{
public static readonly string Foo = ConfigurationManager.AppSettings["Foo"];
}
Run Code Online (Sandbox Code Playgroud)
在.NET Framework 4.x的,我可以用ConfigurationManager.AppSettings ["Foo"]得到Foo的Webconfig,然后我可以轻松地获得的值Foo通过Bar.Foo
但是在.Net核心中,我必须注入options,并且无法获得Foo通过的价值Bar.Foo
有没有一种方法,可以直接通过Bar.Foo获取值来获得 Foo?
Min*_*ata 62
所以有两种方法可以解决这个问题.
你有一个appsettings.json文件:
{
"myConfiguration": {
"myProperty": true
}
}
Run Code Online (Sandbox Code Playgroud)
您可以像这样创建配置POCO:
public class MyConfiguration
{
public bool MyProperty { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在您的startup.cs中,您在ConfigureServices中有一些注册配置的东西:
public void ConfigureServices(IServiceCollection services)
{
services.Configure<MyConfiguration>(Configuration.GetSection("myConfiguration"));
}
Run Code Online (Sandbox Code Playgroud)
然后在您的控制器/服务中注入IOptions并且它是可用的.
public class ValuesController : Controller
{
private readonly MyConfiguration _myConfiguration;
public ValuesController(IOptions<MyConfiguration> myConfiguration)
{
_myConfiguration = myConfiguration.Value;
}
}
Run Code Online (Sandbox Code Playgroud)
就我个人而言,我不喜欢使用IOptions,因为我认为它拖累了一些我并不想要的额外垃圾,但是你可以做一些很酷的事情,比如热交换和其中的东西.
它大致相同,但在您的配置服务方法中,您改为绑定到POCO的单个部分.
public void ConfigureServices(IServiceCollection services)
{
//services.Configure<MyConfiguration>(Configuration.GetSection("myConfiguration"));
services.AddSingleton(Configuration.GetSection("myConfiguration").Get<MyConfiguration>());
}
Run Code Online (Sandbox Code Playgroud)
然后你可以直接注入POCO:
public class ValuesController : Controller
{
private readonly MyConfiguration _myConfiguration;
public ValuesController(MyConfiguration myConfiguration)
{
_myConfiguration = myConfiguration;
}
}
Run Code Online (Sandbox Code Playgroud)
有点简单,因为你应该使用一个接口来使单元测试更容易,但你明白了.
主要来自这里:http://dotnetcoretutorials.com/2016/12/26/custom-configuration-sections-asp-net-core/
Dav*_*kle 19
您也可以直接使用配置.您的设置被注入,因此您可以通过DI获取它们...
private readonly IConfiguration _configuration;
public MyClass(IConfiguration configuration)
{
_configuration = configuration;
}
Run Code Online (Sandbox Code Playgroud)
然后你可以阅读你的设置......
在这种情况下,我收到一个回收...
var myList = _configuration.GetSection("MyList").Get<List<string>>();
Run Code Online (Sandbox Code Playgroud)
Pin*_*Dev 15
最上面的解决方案很耗时且不简单,这是实现此目的的最佳有效方法,无需在启动时进行任何设置。就像使用良好的ol Configuration.Manager.AppSettings [“ setting”]
首先创建一个类似“ Credential”的类:
public class Credential
{
public string Username {get;set}
public string Password {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
现在完成设置,将IConfiguration放在您的构造函数上,如下所示:
private IConfiguration _configuration;
public ValuesController(IConfiguration iconfig)
{
_configuration = iconfig;
}
Run Code Online (Sandbox Code Playgroud)
然后您就可以调用它了!
Credential c = new Credential();
c.UserName = _configuration.GetValue<string>("Credential:username");
c.Password = _configuration.GetValue<string>("Credential:password");
Run Code Online (Sandbox Code Playgroud)
假设您的appsettings.json看起来像这样:
"Credential": {
"username": "myuser",
"password": "mypassword"
}
Run Code Online (Sandbox Code Playgroud)
希望这对某人有帮助。
小智 8
将您的班级定义为
public class MyClass{
private readonly IConfiguration _configuration;
public MyClass(IConfiguration configuration)
{
_configuration = configuration;
}
public void myFunction(){
var value= _configuration.GetValue("xxx");
}
}
Run Code Online (Sandbox Code Playgroud)
当你从其他地方调用它时
IConfiguration config = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: false).Build();
MyClass myclass = new MyClass(config)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
46396 次 |
| 最近记录: |