Как получить доступ к appSettings. json, который принадлежит проекту. NET Core Web API, из проекта библиотеки классов. NET Framework в том же решении? - PullRequest
1 голос
/ 27 мая 2020

У меня есть отдельный проект библиотеки классов (. NET Framework 4.8) для доступа к БД. Эта библиотека классов написана на Visual Basi c (VB).

Недавно, из-за нового требования, мне пришлось добавить в свое решение уровень веб-API, чтобы предоставлять данные через конечные точки.

Я создал новый проект. NET Core 2.1 Web API в моем существующем решении. Я настроил параметры приложения в appSettings. json в. NET Core вместо App.config в. NET Framework в соответствии со спецификациями.

Теперь приведенный ниже код не работает (я не могу доступ к моим настройкам конфигурации).

Public connectionString As String = System.Configuration.ConfigurationManager.AppSettings("ConnectionString")

Ошибка: system.typeinitializationexception

Примечание. Этот код ранее работал. Невозможно получить доступ к настройкам конфигурации.

Попытка альтернативы: Я попытался создать. NET Framework Web API (v4.8) вместо. NET Core Веб-API, и это сработало. Итак, пожалуйста, предоставьте мне решение для доступа к appSettings. json из. NET Core Web API project to. NET Framework Class Library (v4.8), который написан на VB.

1 Ответ

0 голосов
/ 28 мая 2020

Как получить доступ к appSettings. json, который принадлежит проекту. NET Core Web API из проекта библиотеки классов. NET Framework в том же решении

Как мы знаем, ASP. NET Использование ядра различные настройки конфигурации . Чтобы выполнить указанное выше требование, вы можете попробовать следующие подходы:

Подход 1: измените метод (ы) библиотеки классов, чтобы принять дополнительный параметр, затем вы можете прочитать ConnectionString et c из Web.config или appsettings. json и передать его как параметр при вызове метода в соответствующих приложениях.

Подход 2: изменить и расширить вашу библиотеку классов, чтобы она работала с ASP. NET параметрами конфигурации ядра, как показано ниже.

Imports System.Configuration
Imports Microsoft.Extensions.Configuration

Public Class DbGeneric
    Private ReadOnly _configuration As IConfiguration
    Public Sub New(ByVal configuration As IConfiguration)
        _configuration = configuration
    End Sub

    Public Sub New()
    End Sub
    Public Function GetAll() As String
        Dim connectionString As String = ConfigurationManager.ConnectionStrings("DefaultConnection").ConnectionString
        Return connectionString
    End Function

    Public Function GetAllForCore() As String
        Dim connectionString As String = _configuration("ConnectionStrings:DefaultConnection").ToString()
        Return connectionString
    End Function
End Class

В ASP. NET app

var dbGeneric = new MyClassLibraryVB.DbGeneric();
var con_str = dbGeneric.GetAll();

In ASP. NET Базовое приложение

public class ValuesController : ControllerBase
{
    private readonly IConfiguration Configuration;
    public ValuesController(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IActionResult GetAll()
    {
        var dbGeneric = new MyClassLibraryVB.DbGeneric(Configuration);
        var con_str = dbGeneric.GetAllForCore();

ConnectionStrings в настройках приложения. json

"ConnectionStrings": {
  "DefaultConnection": "{conection_string_for_netcore}"
}

Результат теста

enter image description here

...