ASP.NET Core:从解决方案中的另一个项目访问appsettings

在我的Startup.cs类中,我有以下配置构建,它初始化db上下文:

 var builder = new ConfigurationBuilder() .SetBasePath(env.ContentRootPath) .AddJsonFile("appsettings.json", true, true) .AddJsonFile($"appsettings.{env.EnvironmentName}.json",true) .AddEnvironmentVariables(); Configuration = builder.Build(); NHibernateUnitOfWork.Init(Configuration["ConnectionStrings:OracleConnection"]); 

NHibernateUnitOfWork作为类库项目位于不同的项目中。 我希望能够注入(或以某种方式传递设置),而不是在我的Startup.cs类中使用NHibernateUnitOfWork.Init

我可以在我的类库中构建appsettings但是试图避免这种情况。

什么是理智的做法?

你可以注射它。

Startup.cs类中,可以将以下内容添加到ConfigureServices(IServiceCollection services)方法中:

 services.AddSingleton(Configuration); 

从那里,您可以使用构造函数注入并以与通常相同的方式向下游使用它:

 public class SomeClass { public SomeClass(IConfigurationRoot configuration) { NHibernateUnitOfWork.Init(Configuration["ConnectionStrings:OracleConnection"]); } } 

注意:这假定ConfigurationStartup.cs类中定义:

 public static IConfigurationRoot Configuration; 

请参阅: 在.NET Core Test Project中读取appsettings json值

基本上这是使用TestServer的集成解决方案。 但是如果你不得不使用配置,那么无论如何它应该是一个集成测试。

在测试项目中的主项目中使用配置的关键如下:

 "buildOptions": { "copyToOutput": { "include": [ "appsettings.Development.json" ] } } 

需要进入主项目的project.json