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

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

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

Я создал новый проект веб-API .NET Core 2.1 в моем существующем решении. Я настроил параметры приложения в 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 Web API, и это сработало. Итак, предоставьте мне решение для доступа к appSettings.json из проекта .NET Core Web API в библиотеку классов .NET Framework (v4.8), написанную на VB.


person Jerin Nishok    schedule 27.05.2020    source источник
comment
Вам нужно будет прочитать файл, как любой другой текстовый файл, а затем проанализировать файл JSON на объект. Это стандартная проблема, примеры которой вы можете легко найти в Google, нам действительно не нужно повторять ее здесь, я не думаю, если вы уже что-то пробовали и у вас есть конкретная ошибка или проблема (в этом случае, пожалуйста, сообщите нас об этом) ?. P.s. Это невозможно сделать через диспетчер конфигурации, потому что это не является частью стандартной конфигурации в .NET Framework.   -  person ADyson    schedule 27.05.2020
comment
Или почему бы просто не скопировать те же настройки в свой web.config? У вас есть два отдельных приложения, у них действительно должны быть свои собственные конфигурации, не создавая ненужной зависимости между двумя   -  person ADyson    schedule 27.05.2020
comment
Или почему бы просто не использовать уже созданный рабочий .NET Web API? Зачем нужно его переписывать с помощью .NET Core?   -  person ADyson    schedule 27.05.2020


Ответы (1)


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

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

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

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

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

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

В приложении ASP.NET Core

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 в appsettings.json

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

Результат испытаний

введите описание изображения здесь

person Fei Han    schedule 28.05.2020