public static void Main()
var container = new UnityContainer();
container.RegisterType<IDbContext, AuthenticationContext>(typeof(AuthenticationContext).ToString(), new InjectionConstructor(AppConstants.AuthenticationKey));
container.RegisterType<IDbContext, ApplicationContext>(typeof(ApplicationContext).ToString(), new InjectionConstructor(AppConstants.ApplicationKey));
var factory = new DbContextFactory(container);
var context = factory.CreateContext<AuthenticationContext>();
public class DbContextFactory
private readonly IUnityContainer _container;
public DbContextFactory(IUnityContainer container)
public IDbContext CreateContext<TDbContext>() where TDbContext : IDbContext
var key = typeof(TDbContext).ToString();
return _container.Resolve<TDbContext>(key);
public class AuthenticationContext : DbContextWrapper
public AuthenticationContext(string connectionString) : base(connectionString)
public class ApplicationContext : DbContextWrapper
public ApplicationContext(string connectionString) : base(connectionString)
public class DbContextWrapper : IDbContext
private readonly string _connectionString;
public DbContextWrapper(string connectionString)
_connectionString = connectionString;
Console.WriteLine(_connectionString);
public interface IDbContext
public class AppConstants
public static string AuthenticationKey = "Authentication.Connection";
public static string ApplicationKey = "Application.Connection";