【发布时间】:2018-11-26 21:18:43
【问题描述】:
我来自常规的 .NET Web API,我发现 .NET Core 2 中的配置体验绝对令人抓狂。
官方文档和this one等一些教程我都看了,都看错了。
我有一个用于建立 MongoDB 连接的数据库助手类。
我的配置比较简单
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"DefaultConnection": "mongodb://localhost:27017"
}
}
- 我从 .NET Core 官方 Angular (ngx) 样板模板开始
- 我将配置添加为 Startup.CS 中
ConfigureServices部分下的服务单例,就像services.AddSingleton(Configuration); -
我尝试像这样将配置注入我的班级
public class DatabaseHelper { public static string connstring { get; private set; } public DatabaseHelper(IConfiguration Configuration) { connstring = Configuration["ConnectionStrings:DefaultConnectionString"]; } public static IMongoDatabase QuizDB { get; } = GetDatabase("QuizEngine"); public static IMongoCollection<Quiz> QuizCol { get; } = GetQuizCollection(); public static MongoClient GetConnection() { return new MongoClient(connstring); } public static IMongoDatabase GetDatabase(string database) { MongoClient conn = DatabaseHelper.GetConnection(); return conn.GetDatabase(database); } public static IMongoCollection<Quiz> GetQuizCollection() { return DatabaseHelper.QuizDB.GetCollection<Quiz>("Quizzes"); } }
这编译和构建没有 Intellesense 错误 - 但是当我在调试器中单步执行它时,connstring 为空。我尝试过使用配置名称等,但我似乎总是空着。
我也尝试过使用以下答案中的示例代码的 POCO 方式,但我似乎遇到了静态字段初始化程序问题。
Getting value from appsettings.json in .net core
如果它在这里有帮助的话是启动类部分,它设置Configuration的公共值
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
【问题讨论】:
-
你的名字不匹配是错字吗?
DefaultConnection与DefaultConnectionString -
克里斯所说的。另外,您不应该将
IConfiguration注入您的课程。使用选项模式或直接注入MongoClient(并通过工厂方法注册,如services.AddScoped<IMongoClient>(provider => new MongoClient(Configuration.GetConnectionString("DefaultConnection"))); -
您可以在此处阅读有关选项模式的更多信息:Options pattern in ASP.NET Core。附言它说 ASP.NET Core 中的选项模式,但它也可以应用于控制台应用程序
-
@Chris 你是对的,我有一个错字 - 但是我尝试将其更改为更简单的内容 (
dburi),但它仍然显示为 null。 -
啊,刚刚注意到除了构造函数之外的一切都是静态的。您是否在 DI 容器实例化的对象实例上调用这些方法?
标签: c# asp.net-core