Как получить строку подключения в функции configureServices в ASP .NET - PullRequest
0 голосов
/ 04 июля 2018

Я пытаюсь использовать службу идентификации для управления входами в приложение. У меня есть следующее

let configureServices (services : IServiceCollection) =
    // Configure InMemory Db for sample application        
    services.AddDbContext<IdentityDbContext<IdentityUser>>(
        fun options ->        
            options.UseInMemoryDatabase("NameOfDatabase") |> ignore
        ) |> ignore

Однако он использует базу данных в памяти. Я хочу сохранить информацию о регистрации пользователей, и у меня есть настройка postgresql, и я хочу использовать эту базу данных для сохранения информации. У меня есть информация connectionString в файле settings.json. Я хочу изменить вышеуказанную функцию на это:

let configureServices (services : IServiceCollection) =
    // Configure InMemory Db for sample application        
    services.AddDbContext<IdentityDbContext<IdentityUser>>(
        fun options ->        
            let config = ctx.GetService<IConfiguration>()
            let connString = config.Item("connectionString")
            options.UseNpgsql(connString) |> ignore
        ) |> ignore

но проблема в функции configureServices. У меня нет доступа к Httpcontext (представленному ctx выше), который обрабатывает конфигурацию приложения. Как мне это сделать? Обычно я хочу получить значение поля connectionString из файла settings.json в моей функции configureServices.

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

Я предполагаю, что вы используете эту функцию, как показано ниже:

WebHost
    .CreateDefaultBuilder(args)
    .ConfigureServices(Action<_> configureServices)
    .Configure(Action<_> configureApp)

Вы обнаружите, что этот метод ConfigureServices перегружен Action<WebHostBuilderContext, IServiceCollection>. Таким образом, вы можете изменить свою функцию следующим образом:

let configureServices (context:WebHostBuilderContext) (services:IServiceCollection) =
    let config = context.Configuration
    let connString = config.GetConnectionString "DefaultConnection"

    services.AddDbContext<IdentityDbContext<IdentityUser>>(fun opts ->
        opts.UseNpgsql(connString) |> ignore
        ) |> ignore

И измените код вызова на этот (примечание Action<_> становится Action<_,_>):

WebHost
    .CreateDefaultBuilder(args)
    .ConfigureServices(Action<_,_> configureServices)
    .Configure(Action<_> configureApp)
0 голосов
/ 04 июля 2018

Надеюсь, вы добавили следующую строку кода в ваш файл app.cofig.

  <connectionStrings>
    <add name="DefaultConnection"
         connectionString="Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" />
  </connectionStrings>
</configuration>

Который сохранил строку подключения к базе данных. В ConfigureServices () U есть доступ к объекту конфигурации, который дает вам доступ к строке подключения вашего приложения из файла app.config.

public void ConfigureServices(IServiceCollection services)
{
    // Add framework services.
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
}

Для более подробной информации: - Нажмите здесь

...