Handling dependencies with IoC that change within a single function call

Posted by Jess on Stack Overflow See other posts from Stack Overflow or by Jess
Published on 2010-04-08T22:57:00Z Indexed on 2010/04/09 0:33 UTC
Read the original article Hit count: 387

We are trying to figure out how to setup Dependency Injection for situations where service classes can have different dependencies based on how they are used. In our specific case, we have a web app where 95% of the time the connection string is the same for the entire Request (this is a web application), but sometimes it can change.

For example, we might have 2 classes with the following dependencies (simplified version - service actually has 4 dependencies):

public LoginService (IUserRepository userRep)
{
}

public UserRepository (IContext dbContext)
{
}

In our IoC container, most of our dependencies are auto-wired except the Context for which I have something like this (not actual code, it's from memory ... this is StructureMap): x.ForRequestedType().Use() .WithCtorArg("connectionString").EqualTo(Session["ConnString"]);

For 95% of our web application, this works perfectly. However, we have some admin-type functions that must operate across thousands of databases (one per client). Basically, we'd want to do this:

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();
   }
}

My question is: How do we create that new dependency graph for each time through the loop, while maintaining something that can easily be tested?

© Stack Overflow or respective owner

Related posts about dependency-injection

Related posts about structuremap