Мы пытаемся выяснить, как настроить внедрение зависимостей для ситуаций, когда у классов обслуживания могут быть разные зависимости в зависимости от того, как они используются. В нашем конкретном случае у нас есть веб-приложение, в котором 95% времени строка подключения одинакова для всего запроса (это веб-приложение), но иногда оно может измениться.
Например, у нас может быть 2 класса со следующими зависимостями (упрощенная версия - сервис фактически имеет 4 зависимости):
public LoginService (IUserRepository userRep)
{
}
public UserRepository (IContext dbContext)
{
}
В нашем контейнере IoC большинство наших зависимостей имеют автоматическую привязку, кроме контекста, для которого у меня есть что-то вроде этого (не фактический код, это из памяти ... это StructureMap)
x.ForRequestedType (). С помощью ()
.WithCtorArg ( "ConnectionString") EqualTo (Session [ "ConnString"]);.
Для 95% нашего веб-приложения это работает отлично. Однако у нас есть некоторые функции типа администратора, которые должны работать с тысячами баз данных (по одной на каждого клиента). По сути, мы бы хотели сделать это:
public CreateUserList(IList<string> connStrings)
{
foreach (connString in connStrings)
{
//first create dependency graph using new connection string
????
//then call service method on new database
_loginService.GetReportDataForAllUsers();
}
}
Мой вопрос таков: как мы можем создать этот новый граф зависимостей каждый раз в цикле, сохраняя при этом что-то, что можно легко проверить?