使用asp.net core 2.0
我创建了一个BD测试项目。
我有一个像这样结构的抽象基类:
[ExcludeFromCodeCoverage]
[Category("Integration")]
public abstract class BaseIntegrationContext : BaseIntegrationSetUp
{
protected MyDataBaseContext Context;
private IWebHostBuilder _webHostBuilder;
protected override void FixtureSetUp()
{
base.FixtureSetUp();
WebSetUp();
DbSetUp();
}
private void WebSetUp()
{
_webHostBuilder = new WebHostBuilder()
.UseStartup<Startup>();
}
private void DbSetUp()
{
base.FixtureSetUp();
//options
var config = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.Build();
var options = new DbContextOptionsBuilder<InformedWorkerDbContext>()
.UseSqlServer(config.GetConnectionString("DefaultConnection"))
.Options;
Context = new MyDataBaseContext(options);
}
}
除非我将appsettings.json复制并添加到此测试项目中,否则显然会收到无法找到json文件的错误。
使用在测试项目中使用的抽象基类访问appsettings.json的可接受方法是什么?
我尝试添加一个名为ServiceSettings的实体模型,该模型映射到我的web项目中的json文件:
public class ServiceSettings
{
public string DatabaseServerConnection { get; set; }
}
我在startup.cs中实例化:
services.Configure<ServiceSettings>(Configuration.GetSection("ServiceSettings"));
我的Json文件如下所示:
{
"ServiceSettings": {
"DatabaseServerConnection": "Server=localhost;Initial,Catalog=InformedWorker;Integrated Security=True;MultipleActiveResultSets=true"
},
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Information"
},
"Console": {
"LogLevel": {
"Microsoft.AspNetCore.Mvc.Razor.Internal": "Warning",
"Microsoft.AspNetCore.Mvc.Razor.Razor": "Debug",
"Microsoft.AspNetCore.Mvc.Razor": "Error",
"Default": "Information"
}
}
}
}
在我的抽象课中我这样做:
IOptions<ServiceSettings> myOptions = Options.Create(new ServiceSettings()
{
});
但是键入myOptions intellisense只能让我'值'来使用..?
答案 0 :(得分:0)
除非我将appsettings.json复制并添加到此测试项目中,否则显然会收到无法找到json文件的错误。
这是因为您没有在
中指定文件位置var config = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.Build();
.AddJsonFile
注册JSON FileProvider和路径参数(&#34; appsettings.json&#34;在您的情况下)是相对于ConfigurationBuilder.Properties
中存储的基本路径的路径。因此,默认基本路径为null,并且当前工作目录中需要一个文件。
要设置基本路径,您可以使用.SetBasePath(<basePath>)
扩展方法
public static IConfigurationBuilder SetBasePath(this IConfigurationBuilder builder, string basePath);
其中basePath
:基于文件的提供者的绝对路径。