Я пытаюсь выяснить, как использовать IoC в ситуациях, когда зависимые классы могут меняться на основе некоторой переменной в приложении (в данном случае состояния сеанса). Например, у каждого нашего клиента есть другая база данных, поэтому соединение с базой данных должно быть построено на значении, хранящемся на их сеансе (в частности, поскольку некоторые пользователи могут иметь несколько баз данных, если они владеют несколькими предприятиями и будут переключаться между базами данных),
Вот общий пример того, как мы сейчас настроили эту структуру:
public class MyTestController : ControllerBase
{
Repository _rep;
public MyTest(Repository rep)
{
_rep = rep;
}
public MyTest()
{
string connString = String.Format("Server={0}; Database={1};"
, SessionContainer.ServerName, SessionContainer.DatabaseName;
var dc = new DataContext(connString);
_rep = new Repository(dc);
}
public int SampleFn()
{
return _rep.GetCountOfEmployees();
}
}
public class Repository
{
DataContext _context;
public Repository(DataContext context)
{
_context = context;
}
}
Можем ли мы установить это с помощью IoC и устранить стандартные c-tors? Если да, то как? У меня нет проблемы, просто используя D.I. как это, но я хотел бы изучить возможность StructureMap или Unity (обратите внимание: мы обычно проходим в db/server в класс factory, который строит datacontext... выше пример просто для краткости).