Исходя из вашей ситуации и ответа, я бы посоветовал изучить внедрение зависимости.Затем вы можете позволить ему определять, какой источник данных использовать, основываясь на любом наборе переменных, по которому вы хотите, чтобы он определял вещи.Это то, что я использую, когда у меня есть несколько источников данных, и я хочу, чтобы источник данных определялся некоторыми заранее определенными факторами, которые я выбрал.
http://en.wikipedia.org/wiki/Dependency_injection
Что касается того, кто должен осуществлять инъекцию,Я оставляю это фабрике репозитория и просто спрашиваю интерфейс в контроллере.Затем фабрика на основе внедрения зависимостей определяет, какой репозиторий предоставить.
Пример:
Внедрение зависимостей в глобальный класс инфраструктуры:
Bind<INewsArticleRepository>().ToMethod(context => NewsRepositoryFactory.Create((NewsRepositoryFactory.RepositoryType)Enum.Parse(typeof(NewsRepositoryFactory.RepositoryType), ConfigurationManager.AppSettings["NewsArticleRepositoryProvider"])));
Фабрика репозитория
public static INewsArticleRepository Create(RepositoryType type)
{
switch (type)
{
case RepositoryType.Mock:
return new MockNewsArticlesRepository();
case RepositoryType.Sql:
return new SqlNewsArticleRepository();
default:
throw new NotImplementedException();
}
}
Вызовите контроллер для хранилища
private INewsArticleRepository newsItemRepository;
public NewsController(INewsArticleRepository newsItemRepository)
{
this.newsItemRepository = newsItemRepository;
}