Data Access Connection String property has not been initialized

Viewed 31

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
0 Answers
Related