admin管理员组文章数量:1391977
I am in the process of migrating a large solution from .NET Framework 4.8 to .NET 9.0. I used .NET Upgrade Assistant to get started. I have a long way to go.
All of the projects in the solution have their own static DataAccess class using System.Data.SqlClient for all database interaction. (That's a problem I'll deal with next.)
How do I get the connection string from appsettings.json into a static class, where I can't call a constructor?
namespace MyProject
{
public static class DataAccess
{
/* LEGACY:
private static string m_ConnectionString =
ConfigurationManager.ConnectionStrings["DefaultConnStrg"].ConnectionString;
*/
private static string m_ConnectionString = string.Empty;
private static IConfiguration m_Config;
// This will not compile! "CS0710: Static classes cannot have instance constructors."
public ShopDataAccess( IConfiguration configuration )
{
m_Config = configuration;
m_ConnectionString = m_Config.GetConnectionString( "DefaultConnStrg" );
}
...
}
I am in the process of migrating a large solution from .NET Framework 4.8 to .NET 9.0. I used .NET Upgrade Assistant to get started. I have a long way to go.
All of the projects in the solution have their own static DataAccess class using System.Data.SqlClient for all database interaction. (That's a problem I'll deal with next.)
How do I get the connection string from appsettings.json into a static class, where I can't call a constructor?
namespace MyProject
{
public static class DataAccess
{
/* LEGACY:
private static string m_ConnectionString =
ConfigurationManager.ConnectionStrings["DefaultConnStrg"].ConnectionString;
*/
private static string m_ConnectionString = string.Empty;
private static IConfiguration m_Config;
// This will not compile! "CS0710: Static classes cannot have instance constructors."
public ShopDataAccess( IConfiguration configuration )
{
m_Config = configuration;
m_ConnectionString = m_Config.GetConnectionString( "DefaultConnStrg" );
}
...
}
Share
Improve this question
edited Mar 19 at 5:53
Zhi Lv
22k1 gold badge27 silver badges37 bronze badges
asked Mar 13 at 21:46
TrintTrint
294 bronze badges
2 Answers
Reset to default 1My guess is that a lot of problems will be resolved once you move away from the static DataAccess class. It seems that your legacy app spun its own Factory-like scheme that can be handled cleanly using native .NET & EntityFrameworkCore.
DbContext instances (or DbContextFactory instances) can be set up to be available from the IServiceProvider, or injected directly into controllers or other service classes. DbContexts or DbContextFactories will get their connection strings within the static Main method, where you build your IConfiguration to go into the IServiceProvider and can pull connections strings at the same time.
Is each DataAccess the same DbContext or are there different tables, etc., involved? If they are the same, create a projects for your DAL from which each of your other projects can depend.
How do I get the connection string from appsettings.json into a static class, where I can't call a constructor?
You need to initialize the configuration when the app starts. Refer to the following sample:
In the appsettings.json file, there have a connection string:
{
"ConnectionStrings": {
"DefaultConnection": "......"
},
Create a static class AppSettings.cs:
public static class AppSettings
{
public static string? ConnectionString { get; private set; }
public static void Initialize(IConfiguration configuration)
{
ConnectionString = configuration.GetConnectionString("DefaultConnection");
}
public static string GetConnectionString()
{
return ConnectionString;
}
}
Then, initialize the AppSettings in the Program.cs:
var builder = WebApplication.CreateBuilder(args);
...
// Initialize AppSettings
AppSettings.Initialize(builder.Configuration);
var app = builder.Build();
...
After that you can access connection string use the following code:
public IActionResult Index()
{
var connection = AppSettings.ConnectionString;
var connection2 = AppSettings.GetConnectionString();
return View();
}
The result as below:
本文标签:
版权声明:本文标题:asp.net core - Migrating from .NET Framework to .NET 9.0, How to access ConnectionStrings from a static class? (web.config vs ap 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1744683595a2619564.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论