如何在同一解决方案中从.NET Framework类库项目访问属于.NET Core Web API项目的appSettings.json?

问题描述 投票:1回答:1

我有一个单独的类库项目(.NET Framework 4.8),用于访问数据库。此类库是用Visual Basic(VB)编写的。

最近,由于一项新要求,我不得不在解决方案中添加一个Web API层以通过端点公开数据。

我在现有解决方案中创建了一个新的.NET Core 2.1 Web API项目。我在.NET Core中的appSettings.json中配置了应用程序设置,而不是在.NET Framework中的App.config中按照规范进行了配置。

现在下面的代码失败(我无法访问我的配置设置)。

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

错误:system.typeinitializationexception

注意:此代码以前有效。无法访问配置设置。

替代尝试: 我试图创建.NET Framework Web API(v4.8)而不是.NET Core Web API,并且它可以正常工作。因此,请提供一个解决方案,以从.NET Core Web API项目访问用VB编写的.NET Framework类库(v4.8)的appSettings.json。

vb.net asp.net-core-webapi app-config class-library appsettings
1个回答
0
投票

如何在同一解决方案中从.NET Framework类库项目访问属于.NET Core Web API项目的appSettings.json,]

我们知道,ASP.NET Core使用different configuration settings。为了达到上述要求,您可以尝试以下方法:

方法1:

修改您的类库方法以接受其他参数,然后您可以从Web.configappsettings.json中读取ConnectionString等,并将其作为参数,而您在相应的Apps中调用方法。

方法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();

appsettings.json中的ConnectionStrings

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

测试结果

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.