C# 如何在类中获取ConnectionString表单appsettings.json?

C# 如何在类中获取ConnectionString表单appsettings.json?,c#,mysql,asp.net-core,.net-core,C#,Mysql,Asp.net Core,.net Core,我正在尝试连接到我的数据库而不硬编码connectionstring。这就是我想到的,有没有什么聪明的方法来获取连接字符串 SecurityDAO类: public class SecurityDAO { internal bool FindByUser(UserModel user) { string connectionString = ""; bool success = false

我正在尝试连接到我的数据库而不硬编码connectionstring。这就是我想到的,有没有什么聪明的方法来获取连接字符串

SecurityDAO类:

public class SecurityDAO
    {
        internal bool FindByUser(UserModel user)
        {
            string connectionString = "";
            bool success = false;

            string queryString = "SELECT * FROM users WHERE username = @username AND password = @password";

            using (MySqlConnection connection = new MySqlConnection(connectionString))
            {
                MySqlCommand command = new MySqlCommand(queryString, connection);

                command.Parameters.Add("@username", MySqlDbType.VarChar, 50).Value = user.Username;
                command.Parameters.Add("@password", MySqlDbType.VarChar, 50).Value = user.Password;

                try
                {
                    connection.Open();
                    MySqlDataReader reader = command.ExecuteReader();

                    if (reader.HasRows)
                    {
                        success = true;
                    }
                    else
                    {
                        success = false;
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
            return success;
        }
    }
安全服务类别:

public class SecurityService
    {
        SecurityDAO daoService = new SecurityDAO();

        public bool Authenticate(UserModel user)
        {
            return daoService.FindByUser(user);
        }
    }

您需要使用构造器来注入它

public SecurityDAO(IConfiguration configuration)
{
    this.configuration = configuration;
}

您需要使用构造器来注入它

public SecurityDAO(IConfiguration configuration)
{
    this.configuration = configuration;
}

如果不想使用DI,可以通过以下方式在appsettings.json中获取数据:

var configuration = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json").Build();
var connectionString = configuration.GetConnectionString("XXXX");

如果不想使用DI,可以通过以下方式在appsettings.json中获取数据:

var configuration = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json").Build();
var connectionString = configuration.GetConnectionString("XXXX");

您可以使用DI在使用SecurityService的地方获取IConfiguration,并将IConfiguration传递给SecurityService.Authenticate。下面是一个演示:

Startup.cs:

public void ConfigureServices(IServiceCollection services)
        {
            ...

            services.AddSingleton<IConfiguration>(Configuration);
           
            services.AddScoped<SecurityService, SecurityService>();

        }
安全服务:

SecurityDAO daoService = new SecurityDAO();

        public bool Authenticate(UserModel user,IConfiguration Configuration)
        {
            return daoService.FindByUser(user, Configuration);
        }
安全DAO:

public class SecurityDAO
    {
        internal bool FindByUser(UserModel user, IConfiguration Configuration)
        {
            string connectionString = Configuration["ConnectionStrings:DefaultConnection"];
            return true;
        }
    }
结果:

您可以使用DI在使用SecurityService的地方获取IConfiguration,并将IConfiguration传递给SecurityService.Authenticate。下面是一个演示:

Startup.cs:

public void ConfigureServices(IServiceCollection services)
        {
            ...

            services.AddSingleton<IConfiguration>(Configuration);
           
            services.AddScoped<SecurityService, SecurityService>();

        }
安全服务:

SecurityDAO daoService = new SecurityDAO();

        public bool Authenticate(UserModel user,IConfiguration Configuration)
        {
            return daoService.FindByUser(user, Configuration);
        }
安全DAO:

public class SecurityDAO
    {
        internal bool FindByUser(UserModel user, IConfiguration Configuration)
        {
            string connectionString = Configuration["ConnectionStrings:DefaultConnection"];
            return true;
        }
    }
结果:

“我不知道为什么”为什么不呢?你希望它是什么?你从来没有设定过。你的意思是通过构造函数注入它吗?你应该先学习C#basics。我更新了代码,我不能用构造函数初始化它,因为我不知道应该传递什么参数给SecurityDAO。有多种方法。我更喜欢使用
IOptions
,其中T是一个类(appsettings.json的结构)。您可以配置appsettings.json的各个部分,并根据需要注入任何内容。您可以在MSDN上找到更多信息。@MaxK123 ASP.NET核心使用DI传递服务。您的类
SecurityDAO
SecurityService
就是设计糟糕的例子。与其在调用
SecurityService
构造函数之前创建
SecurityDAO
的新实例,实际上您需要将它注入
SecurityService
构造函数中?你希望它是什么?你从来没有设定过。你的意思是通过构造函数注入它吗?你应该先学习C#basics。我更新了代码,我不能用构造函数初始化它,因为我不知道应该传递什么参数给SecurityDAO。有多种方法。我更喜欢使用
IOptions
,其中T是一个类(appsettings.json的结构)。您可以配置appsettings.json的各个部分,并根据需要注入任何内容。您可以在MSDN上找到更多信息。@MaxK123 ASP.NET核心使用DI传递服务。您的类
SecurityDAO
SecurityService
就是设计糟糕的例子。在调用
SecurityService
构造函数之前,您实际上需要将其注入
SecurityService
构造函数中,而不是创建
SecurityDAO
构造函数的新实例,所以当我在SecurityService中调用SecurityDAO时,我需要一个参数。我得到了以下错误:
没有给出与“SecurityDAO.SecurityDAO(IConfiguration)”所需的形式参数“configuration”相对应的参数。
Ouch,
this
?你不能手动初始化依赖依赖于依赖注入的任何内容,那么你需要在SecurityService中使用SecurityDAO参数的构造函数。我尝试了这个方法,但我在SecurityService中调用了我的类SecurityDAO,在该服务中我创建了一个新的SecurityDAO
SecurityDaoService=new SecurityDAO(),所以当我在SecurityService中调用SecurityDAO时,我需要一个参数。我得到了以下错误:
没有给出与“SecurityDAO.SecurityDAO(IConfiguration)”所需的形式参数“configuration”相对应的参数。
Ouch,
this
?您不能手动初始化依赖于依赖项注入的任何内容,那么您需要在SecurityService中使用SecurityDAO参数的构造函数。谢谢!成功了,谢谢!