I have a project class library that contains SqlDataAccess class and this is the code behind
private readonly IConfiguration _config;
public SqlDataAccess(IConfiguration config)
{
_config = config;
}
public async Task<IEnumerable<T>> LoadData<T, U>(
string storedProcedure,
U parameters,
string connectionId = "Default")
{
using IDbConnection connection = new SqlConnection(_config.GetConnectionString(connectionId));
return await connection.QueryAsync<T>(storedProcedure, parameters,
commandType: CommandType.StoredProcedure); // The error occurred
}
I added DapperDataAccessContainer class to the project library
public static class DapperDataAccessContainer
{
public static IServiceCollection AddDapperDataAccessServices(this IServiceCollection services)
{
services.AddSingleton<ISqlDataAccess, SqlDataAccess>();
services.AddSingleton<IMachineCharpentProductionData, MachineCharpentProductionData>();
services.AddSingleton<IUserData, UserData>();
return services;
}
}
in my winform project I added appsettings.json
{
"ConnectionStrings": {
"Default": "Server=(localdb)\\MSSQLLocalDB;Database=SIM;Trusted_Connection=True;"
}
}
the Program.cs class looks like this
private static void Main()
{
using IHost host = CreateHostBuilder().Build();
System.Windows.Forms.Application.Run(host.Services.GetRequiredService<MainForm>());
}
private static IHostBuilder CreateHostBuilder() =>Host.CreateDefaultBuilder()
.ConfigureAppConfiguration((context, builder) =>
{
builder
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
})
.ConfigureServices((context, services) =>
{
services.AddScoped<MainForm>();
services.AddDapperDataAccessServices();
services.AddSingleton<IFormFactory, FormFactory>();
services.AddTransient<Form1>();
services.AddTransient<Form2>();
});
but when I try to get data I got this error
ConnectionString property has not been initialized
on this line of code
return await connection.QueryAsync<T>(storedProcedure, parameters,
commandType: CommandType.StoredProcedure);
I know that the problem is related to IConfiguration but I can't figure out how to resolve it.
StackTrace:
at Microsoft.Data.SqlClient.SqlConnection.PermissionDemand()
at Microsoft.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
at Microsoft.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry, SqlConnectionOverrides overrides)
at Microsoft.Data.SqlClient.SqlConnection.InternalOpenAsync(CancellationToken cancellationToken)
--- End of stack trace from previous location ---
at Dapper.SqlMapper.<QueryAsync>d__33`1.MoveNext()
at DapperDataAccess.DbAccess.SqlDataAccess.<LoadData>d__2`2.MoveNext() in C:\Users\MBoua\Documents\MinimalAPIDemoAppPart2\DataAccess\DbAccess\SqlDataAccess.cs:line 24
at MainForm.XtraForm1.<GetData>d__3.MoveNext() in C:\Users\MBoua\Documents\MinimalAPIDemoAppPart2\MainForm\XtraForm1.cs:line 30
at MainForm.XtraForm1.<LoadEvent>d__2.MoveNext() in/ C:\Users\MBoua\Documents\MinimalAPIDemoAppPart2\MainForm\XtraForm1.cs:line 26