Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET vNext全局配置访问_Asp.net_Asp.net Core - Fatal编程技术网

ASP.NET vNext全局配置访问

ASP.NET vNext全局配置访问,asp.net,asp.net-core,Asp.net,Asp.net Core,访问ASP.NET vNext中的config.json文件(或存储config的其他位置)的正确/推荐方法是什么 在Startup类中,我设置了如下配置: public class Startup { public IConfiguration Configuration { get; set; } public Startup(IHostingEnvironment env, IApplicationEnvironment appEnv) { var configurati

访问ASP.NET vNext中的
config.json
文件(或存储config的其他位置)的正确/推荐方法是什么

Startup
类中,我设置了如下配置:

public class Startup
{
    public IConfiguration Configuration { get; set; }

public Startup(IHostingEnvironment env, IApplicationEnvironment appEnv)
{
    var configurationBuilder = new ConfigurationBuilder(appEnv.ApplicationBasePath)
        .AddJsonFile("config.json")
        .AddEnvironmentVariables();

    Configuration = configurationBuilder.Build();
}
但是如果我需要在其他地方访问连接字符串,我该如何做呢?例如,在EF上下文的
onconfigurang
中,如何获取连接字符串:

protected override void OnConfiguring(EntityOptionsBuilder optionsBuilder)
{
    optionsBuilder.UseSqlServer( ??? );
我读到你可以用这个:

var config = Startup.Configuration
    ?? new Configuration()
        .AddJsonFile("config.json")
        .AddEnvironmentVariables();
但是(a)启动不是静态的,并且(b)您肯定不想在每次需要时都重新构建配置设置-这会在使用它的地方复制代码

我也读过你应该使用的文章,但是这个链接并没有完全告诉你怎么做。如果我的DbContext构造函数有一个注入的参数,那么如何将其注入无参数BaseApiController


这似乎是一个常见/简单的要求:在启动中配置之后,如何在其他地方访问该配置?这应该出现在所有的文档/示例中

以下是我得到的有效信息:

启动
首先,应该避免将数据库上下文注册为单例。另外,传递原始
IConfiguration
接口也不是一个好做法

相反,您可以创建一个POCO选项类:

public class DbOptions
{
    public string ConnectionString { get; set }
}
并使用config.json中的部分将其填充到
ConfigureServices
方法中:

services.Configure<DbOptions>(Configuration.GetConfigurationSection("Data:DefaultConnection"));

谢谢这里有一篇我刚刚发现的非常好的文章:一个缺点:我使用了一个BaseApiController来实例化和处理上下文,所有的控制器都继承了它。现在我不能使用该模式,因为BaseApiController需要一个无参数构造函数。你知道怎么避开吗?我基本上就是这么解释的。不过,那篇文章中使用的
配置
类有点过时了。现在必须使用
ConfigurationBuilder
,然后调用
Build
[Route("api/[controller]")]
public class TestController : BaseController
{
    private readonly Context _context;

    // have the context injected
    public TestController(Context context)
    {
        _context = context;
    }

    [HttpGet]
    public ActionResult Get()
    {
        return new ObjectResult(_context.Clients.ToList());
    }
}
public class DbOptions
{
    public string ConnectionString { get; set }
}
services.Configure<DbOptions>(Configuration.GetConfigurationSection("Data:DefaultConnection"));
public sealed class Context : IdentityDbContext<IdentityUser>
{
    private readonly DbOptions _options;

    public DbSet<Client> Clients { get; set; }

    public Context(IOptions<DbOptions> optionsAccessor)
    {
        // store the injected options
        _options = optionsAccessor.Options;
    }

    // other code..
}