I am developing a .Net 8.0 application, using Repository pattern and database first approach.
Program.cs file:
builder.Services.ConfigureRepositoryManager();
builder.Services.ConfigureSqlContext(builder.Configuration);
ServiceExtensions.cs file:
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);
});
}
The connection string inside ConfigureSqlContext method gets updated with username and password, meaning the conString.ConnectionString is exactly correct. But on Repository instantiation, it receives the connection string defined inside appsettings.json file.
RepositoryManager.cs file:
public RepositoryManager(RepositoryContext context)
{
_context = context;
_appointment = new Lazy<IAppointmentRepository>(
() => new AppointmentRepository(_context)
);
}
In this class, the _context has wrong connection string.
I am trying to exclude the username and password from connection string, whether in development or in production. As MS suggests, there are multiple ways such as user secrets, but I couldn't make it work. It only works if I include the username and password inside connection string in appsettings.json file.