我正在开发一个 .Net 8.0 应用程序,使用存储库模式和数据库优先方法。
Program.cs文件:
builder.Services.ConfigureRepositoryManager();
builder.Services.ConfigureSqlContext(builder.Configuration);
ServiceExtensions.cs 文件:
public static void ConfigureRepositoryManager(this IServiceCollection services)
{
services.AddScoped<IRepositoryManager, RepositoryManager>();
}
public static void ConfigureSqlContext(
this IServiceCollection services,
IConfiguration configuration
)
{
var conString = new SqlConnectionStringBuilder(configuration.GetConnectionString("sqlConnection"));
conString.UserID = Environment.GetEnvironmentVariable("MSSQLServerUser");
conString.Password = Environment.GetEnvironmentVariable("MSSQLServerPassword");
services.AddDbContext<RepositoryContext>(options =>
{
options.UseSqlServer(conString.ConnectionString);
});
}
ConfigureSqlContext
方法内的连接字符串会使用用户名和密码进行更新,这意味着conString.ConnectionString
是完全正确的。但在存储库实例化时,它接收 appsettings.json
文件中定义的连接字符串。
RepositoryManager.cs 文件:
public RepositoryManager(RepositoryContext context)
{
_context = context;
_appointment = new Lazy<IAppointmentRepository>(
() => new AppointmentRepository(_context)
);
}
在这个类中,_context 有错误的连接字符串。
我试图从连接字符串中排除用户名和密码,无论是在开发中还是在生产中。正如 MS 所建议的,有多种方法,例如用户机密,但我无法使其发挥作用。仅当我在
appsettings.json
文件中的连接字符串中包含用户名和密码时,它才有效。
var newConnectionString = conString.ToString();