Ich bin kein Fan von meiner DAL, die nichts über den Namen der Verbindungszeichenfolge wissen muss, ich glaube nicht, dass das Teil ihrer Verantwortlichkeit ist. Ich ziehe meine eigene Schnittstelle zu erstellen:
zum Beispiel So würde ich so etwas wie erstellen:
public interface IConnectionSettings
{
public ConnectionStringSettings DataWarehouse { get; }
public ConnectionStringSettings Audit { get; }
public ConnectionStringSettings Logging { get; }
public ConnectionStringSettings Security { get; }
}
Dann, wenn ich mit Entity Framework mit DI
public class SecurityContext : DbContext
{
public SecurityContext(IConnectionSettings settings)
: base (settings.Name)
{
}
}
Oder ADO.Net für einige seltsamen Grund:
public class LoggingDataAccess
{
private readonly string _connectionString;
public LoggingDataAccess(IConnectionSettings settings)
{
_connectionString = settings.Logging.ConnectionString;
}
public void SomeRawAdo()
{
using (var con = new Connection(_connnectionstring))
{
}
}
}
In meinem DI:
public static class IocCOnfig
{
public static void Start()
{
var builder = new ContainerBuilder();
builder.Register(r => new ConnectionSettings
{
DataWarehouse = ConfigurationManager.ConnectionStrings["DataWarehouse"],
// etc
});
}
private class ConnectionSettings : IConnectionSettings
{
// implement interface...
}
}
Dank @ Jeremy Armstrong, aber ich benutze Autofac und nicht die DI von ASP.NET Core. Aber ich versuche im Grunde das gleiche mit Autoface ... – stevo
Bearbeitete meine Antwort mit dem restlichen Code, um Ihre Dienste in Ihrem Autofac-Builder zu füllen, und dann den entsprechenden Dienstanbieter zurückgeben. –
Nochmals vielen Dank @ Jeremy Armstrong !! Ich habe es funktioniert! – stevo