2016-11-09 4 views
0

В ASP.NET 4.6 в файле web.config появился раздел connectionStrings, где вы могли добавлять неограниченное количество строк подключения и динамически считывать их в приложении или захватывать отдельную строку соединения по имени.Как вы можете получить доступ к переменному количеству строк подключения в ядре .net (не строго типизированном)?

Примеры ASP.NET Core, которые я видел, используют файл appsettings.json для сохранения настроек, а затем привязывают эти параметры к строго типизированному объекту со свойствами, соответствующими именам параметров. Связанный объект с заданными значениями сохраняется в контейнере, который должен быть введен в приложение.

Мне нужно иметь список connectionStrings в appsettings.json и разрешить пользователю выбирать базу данных во время выполнения (при входе в систему). Я буду хранить имя базы данных, к которой пользователь подключен в качестве претензии. Тем не менее, мне нужно иметь возможность ввести или каким-то образом получить доступ к списку строк подключения во всем приложении, чтобы я мог получить строку подключения для БД, к которому подключен пользователь. Кроме того, я должен быть в состоянии обеспечить строку подключения к инфраструктуре сущности.

+0

Самый простой способ - использовать фабричный шаблон везде, где вам нужна база данных, которая вводится и создается оттуда. затем зарегистрируйте фабрику для своего DbContext: 'services.AddScoped (provider => provider.GetService (). Create());' Недостаток времени для более подробного ответа – Tseng

ответ

2

appsettings.json обладает теми же возможностями, как web.config имели относительно хранения и доступа к ConnectionStrings

{ 
    "ConnectionStrings": { 
    "SqlServerConnection" : "Server=.\\sql2012express;Database=aspnet-IdentityServer4WithAspNetIdentity;Trusted_Connection=True;MultipleActiveResultSets=true", 
    "SqLiteConnection": "Data\\LynxJournal.db" 
    }, 
} 

Они могут быть доступны с кодом

_config.GetConnectionString("SqliteConnection") 

где SqlliteConnection это имя строка подключения

_config - это инъекция службы IConfiguration из Startup.cs, где Конфигурация установлена ​​в

public Startup(IHostingEnvironment env) 
    { 
     var builder = new ConfigurationBuilder() 
      .SetBasePath(env.ContentRootPath) 
      .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) 
      .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true); 

     builder.AddEnvironmentVariables(); 
     Configuration = builder.Build(); 

     Environment = env; 
    } 

    public IConfigurationRoot Configuration { get; } 
    private IHostingEnvironment Environment { get; } 

    public void ConfigureServices(IServiceCollection services) 
    { 
     services.AddMemoryCache(); 
     services.AddEntityFrameworkSqlite().AddDbContext<LynxJournalDbContext>(); 


     services.AddMvcCore() 
      .AddAuthorization() 
      .AddJsonFormatters(); 


     services.AddSingleton<IConfiguration>(Configuration); 
     services.AddSingleton<IHostingEnvironment>(Environment); 

     Services = services; 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^