我来自常规的.NET Web API,并且发现有关.NET Core 2配置的经验绝对令人发疯。
我已经阅读了官方文档和一些教程,例如this one,但是他们都看到了错误。
我有一个数据库帮助程序类,该类应该建立MongoDB连接。
我的配置非常简单
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"DefaultConnection": "mongodb://localhost:27017"
}
}
ConfigureServices
部分下的Startup.CS中将配置作为服务单例添加,就像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; }
答案 0 :(得分:2)
您无需在ConfigureServices
部分的services.AddSingleton(Configuration);
如果使用类库将解决方案分为多个项目,则Microsoft.Extensions.Options.ConfigurationExtensions
软件包将很方便地从appsettings
文件中读取值并将它们注入到项目中的配置类中。
它有2个可以使用的扩展名:
public static T Get<T>(this IConfiguration configuration);
public static IServiceCollection Configure<TOptions>(this IServiceCollection services,
IConfiguration config) where TOptions : class;
您的配置文件appsetting.json
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"MongoDBConnection": "mongodb://localhost:27017"
}
}
在ConfigureServices
文件中为startup.cs
方法添加代码
services.Configure<MongoDBconfig>(Configuration.GetSection("ConnectionStrings"));
services.AddSingleton<DatabaseHelper>();
您的DBhelper.cs
public class MongoDBconfig
{
public string MongoDBConnection { get; set; }
}
public class DatabaseHelper
{
public static string connstring { get; private set; }
public DatabaseHelper(IOptions<MongoDBconfig> Configuration)
{
connstring = Configuration.Value.MongoDBConnection;
}
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");
}
}
答案 1 :(得分:0)
使用此扩展方法GetConnectionString
尝试以下方法public DatabaseHelper(IConfiguration Configuration)
{
connstring = Configuration.GetConnectionString("DefaultConnection");
}
答案 2 :(得分:0)
尝试
public DatabaseHelper(IConfiguration Configuration)
{
string test = Configuration.GetSection("ConnectionStrings")["DefaultConnection"];
Console.WriteLine(test);
}
检查是否能够提取您的appsettings.json中的值