【发布时间】:2017-05-02 11:43:26
【问题描述】:
我无法从 appsettings.json 中检索值,当我运行下面的代码时,出现错误
System.NullReferenceException: 'Object reference not set to an instance of an object.
appSettings.json
"MySettings": {
"ConnectionString": "",
"Provider": "Microsoft.EntityFrameworkCore.SqlServer" }
Startup.cs
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
}
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddMvc();
services.Configure<MySettings>(Configuration.GetSection("MySettings"));
}
MySettings.cs
public class MySettings
{
public static string ConnectionString { get; set; }
public static string Provider { get; set; }
}
TestDriveDatabase.cs
public class TestDriveDatabase
{
private IDatabase objDLOperation;
public TestDriveDatabase(string strConnectionstring)
{
objDLOperation = GetDataLayerInstance(strConnectionstring);
}
public IDatabase GetDataLayerInstance(string strConnectionstring)
{
IDatabase objInstance = null;
var provider = MySettings.Provider;
if (provider == "Microsoft.EntityFrameworkCore.SqlServer")
{
objInstance = new SQLDatabase(strConnectionstring);
}
else if (provider == "Npgsql.EntityFrameworkCore.PostgreSQL")
{
objInstance = new PostgreDatabase(strConnectionstring);
}
return objInstance;
}
}
不幸的是,从appsettings.json 到MySettings 的映射没有发生,变量provider 始终保持为空。这里有什么问题?
【问题讨论】:
-
从属性中移除
static修饰符。通过 DI 传递MySettings。 -
如果去掉静态,就不能简单的访问MySettings.Provider
-
当然。它应该如何工作:stackoverflow.com/q/43679665/5112433
-
@izengod:映射仅适用于实例属性,不适用于静态属性。其次,您应该将
MySettings类注入您的服务(通过IOptions<MySettings>),而不是访问它的静态属性 -
@Tseng 我尝试不使用 DI,因为我没有在控制器中调用它。