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

时间:2016-06-01 12:01:33

标签: c# asp.net asp.net-core

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

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

这样做有什么理智的方式?

2 个答案:

答案 0 :(得分:5)

你可以注射它。

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

services.AddSingleton(Configuration);

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

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

注意:这假定Configuration类中定义了Startup.cs

public static IConfigurationRoot Configuration;

答案 1 :(得分:0)

看到这个: Read appsettings json values in .NET Core Test Project

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

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

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

需要进入主项目&#39> project.json