Нужны ли ограничения Named
и WhenInjectedInto
для ваших привязок?
Я полагаю, что у вас есть класс, который требует оба connectionstring
s, это может быть достигнуто с помощью Named
привязки:
Bind<IDbConnection>().To<SqlConnection>()
.InRequestScope()
.Named("myDashboard")
.WithConstructorArgument("connectionString", ConfigurationManager.ConnectionStrings["dbDashboard"].ConnectionString);
Bind<IDbConnection>().To<SqlConnection>()
.InRequestScope()
.Named("myScoreboard")
.WithConstructorArgument("connectionString", ConfigurationManager.ConnectionStrings["dbScoreboard"].ConnectionString);
И ваш класс может получить оба соединения:
public class ClassWith2DbDependency // <-- I would question this class for SRP violation
{
private readonly IDbConnection _dashboardConnection;
private readonly IDbConnection _scoreboardConnection;
public ClassWith2DBDependency(
[Named("myDashboard")] IDbConnection dashboardConnection
[Named("myScoreboard")] IDbConnection scoreboardConnection)
{
_dashboardConnection = dashboardConnection;
_scoreboardConnection = scoreboardConnection;
}
public void WriteTo2Dbs()
{
// execute dashboard DB procedure
// execute scoreboard DB procedure
}
}
Могу ли я просто определить одну строку подключения, потерять все вышеперечисленные связующие элементы и просто изменить исходный каталог на точку в другой базе данных на лету?
Изменение Initial Catalog
не влияет на существующий SqlConnection
. Можно управлять зависимостями самостоятельно, но вам все еще нужно 2 connectionstring
с:
public class ClassWith2DbDependency
{
public void WriteTo2Dbs()
{
var dashboardCon = ConfigurationManager.ConnectionStrings["dbDashboard"].ConnectionString;
using (SqlConnection connection = new SqlConnection(dashboardCon))
{
// execute dashboard DB procedure
}
var scoreboardCon = ConfigurationManager.ConnectionStrings["dbScoreboard"].ConnectionString;
using (SqlConnection connection = new SqlConnection(scoreboardCon))
{
// execute scoreboard DB procedure
}
}
}
Однако я НЕ рекомендую этот подход, приведенный выше класс нарушает Принцип DI, при наличии непрозрачных зависимостей .
Я не видел ваш код, но не похоже, что вы используете Repository Pattern ? Это может быть хорошим вариантом ...