I have a type that I want to use in Startup of my .net core 3.1 app.
Here is the class I want to inject:
public class DbConnectionStringManager { public readonly string ConnectionStringForDefault; public readonly string ConnectionStringForLogDb; public DbConnectionStringManager(ConnectionStringProviderFactory factory) { var defaultConnectionStringProvider = factory.Create(ConnectionString.Default); var logDbConnectionStringProvider = factory.Create(ConnectionString.LogDb); ConnectionStringForDefault = defaultConnectionStringProvider.GetConnectionString(); ConnectionStringForLogDb = logDbConnectionStringProvider.GetConnectionString(); } } Another class I need to use
public class ConnectionStringProviderFactory { private readonly IConfiguration _configuration; protected readonly AwsSecretProvider _awsSecretProvider; public ConnectionStringProviderFactory(IConfiguration configuration, AwsSecretProvider awsSecretProvider) { _configuration = configuration; _awsSecretProvider = awsSecretProvider; } public AbsConnectionStringProvider Create(ConnectionString connectionString) => connectionString switch { ConnectionString.Default => new DefaultConnectionStringProvider(_configuration, _awsSecretProvider), ConnectionString.LogDb => new LogDbConnectionStringProvider(_configuration, _awsSecretProvider), _ => throw new InvalidOperationException($"No ConnectionStringProvider created for requested source : {connectionString}"), }; public enum ConnectionString { Default, LogDb } } And lastly
public class AwsSecretProvider { private GetSecretValueResponse _response = null; public DatabaseSecret GetSecret(string secretName) { //Some code } } I tried this at my Program.cs for injecting dependencies before startup
public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder .ConfigureLogging((hostingContext, config) => { config.ClearProviders(); }) .UseKestrel(options => { options.AllowSynchronousIO = true; options.Limits.MinRequestBodyDataRate = null; }) .UseIISIntegration() .ConfigureServices(serviceCollection => { serviceCollection.AddSingleton<AwsSecretProvider>(); serviceCollection.AddSingleton<ConnectionStringProviderFactory>(); serviceCollection.AddSingleton<DbConnectionStringManager>(); }) .UseIIS() .UseStartup<Startup>(); })); } When I run the app, I get the following error
System.InvalidOperationException: 'Unable to resolve service for type 'Hesapkurdu.Services.Encryption.Database.DbConnectionStringManager' while attempting to activate 'Hesapkurdu.WebApi.Startup'.'
DbConnectionStringManageronConfiguremethod ofStartupclass.