在ASP.NET 5中使用配置设置

时间:2015-05-10 13:51:59

标签: c# asp.net

我正在学习ASP.NET 5.我真正感到困惑的一个方面是配置。对于我的生活,我无法弄清楚如何从类中的配置文件加载值。在ASP.NET 5之前,我只想使用:

ConfigurationManager.AppSettings["KeyName"];

然而,现在使用ASP.NET 5,我有点困惑。目前,我在Startup.cs中有以下内容:

public IConfiguration Configuration { get; set; }
public Startup(IHostingEnvironment environment)
{
  var configuration = new Configuration()
      .AddJsonFile("config.json");                
  Configuration = configuration;
}

这似乎加载了配置设置就好了。但是,假设我有一个名为“Customer.cs”的类,它与数据库交互。数据库连接字符串位于config.json中。我如何获得这个价值?在我的所有POCO中加载“config.json”似乎并不高效。与此同时,上述方法似乎不允许我以全球方式访问Configuration

如何加载配置设置并检索POCO中的配置值?

谢谢

1 个答案:

答案 0 :(得分:-1)

您不应该在每个POCO实体中加载连接字符串(您是否曾使用过数据库上下文?)。如果您正在使用Entity Framework 7,则可以在应用程序启动时加载数据库上下文服务。

如果您的config.json看起来像这样:

"Data": {
    "DefaultConnection": {
        "Connectionstring": "your_connection_string"
    }

您可以像这样设置环境:

public void ConfigureServices(IServiceCollection services)
{
    // Add EF services to the services container

    services.AddEntityFramework()
        .AddSqlServer()
        .AddDbContext<Your__DB__Context__Class>(options =>
                        options.UseSqlServer(Configuration.Get("Data:DefaultConnection:ConnectionString")));
    }

    //... other services...
}

然后在您的控制器中,您可以通过依赖注入直接使用DbContext:

public class Your__Controller : Controller
{
    [FromServices]
    public Your__DB__Context__Class DbContext { get; set; }
    //...
}

如果您需要在控制器外部使用DbContext服务,您必须这样做:

class NotAControllerClass : NotAController
{
    private readonly Your__DB__Context__Class _dbContext;

    public NotAControllerClass(Your__DB__Context__Class DbContext)
    {
        _dbContext = DbContext;
    }

    //do stuff here...
}

最后,如果您不使用EF7,而是使用EF或自定义ORM的早期版本,则需要自定义依赖注入。尝试在互联网上搜索。