.net Applicazione core webapi con entityframeworkcore. Cercando di capire come passare una stringa di connessione aggiuntiva nella classe della libreria di accesso ai dati oltre a dbcontext. Vedere ** dbcontext ** di seguito è ciò che voglio fare.
startup.cs
var SqlConnection = Configuration.GetConnectionString("SQLConnection");
var BlobConnection = Configuration.GetConnectionString("BlobConnection");
services.AddEntityFramework()
.AddEntityFrameworkSqlServer()
.AddDbContext<VISTrackingContext>(options => options.UseSqlServer(SqlConnection,
sqlServerOptionsAction: sqlOptions =>
{
sqlOptions.EnableRetryOnFailure(maxRetryCount: 5,
maxRetryDelay: TimeSpan.FromSeconds(5),
errorNumbersToAdd: null);
}));
services.AddScoped<IDataManager>(c => new DataManager(**_dbcontext**, BlobConnection));
public FileController(IDataManager manager)
{
_datamanager = manager;
}
public DataManager(VISTrackingContext dbcontext, string blobconnection)
{
_dbcontext = dbcontext;
_blobconnection = blobconnectionstring;
}
Può essere fatto? O esiste un altro modo per iniettare una stringa di connessione aggiuntiva attraverso l'oggetto contesto stesso? Vedo molti commenti e opzioni su questo, ma nessuno degli approcci riguarda sia il contesto che la stringa di connessione che vengono passati all'oggetto repository.
In alternativa alla risposta di @ Win, un approccio più generico:
public class ConnectionStrings : Dictionary<string,string> { }
Startup.cs
services.Configure<ConnectionStrings>(Configuration.GetSection("ConnectionStrings"));
service.AddScoped<IDataManager,DataManager>();
// or
services.AddScoped<IDataManager>(c => new DataManager(
c.GetRequiredService<YourDbContext>(),
c.GetRequiredService<ConnectionStrings>()["BlobConnection"])
);
Servizio
public DataManager(VISTrackingContext dbcontext, ConnectionStrings connectionStrings)