У меня есть некоторый код, который я ищу, чтобы реорганизовать, который выглядит примерно так:Как использовать Ninject заменить репозиторий автокрепеж
public static class RepositoryFactory
{
public static IRepository Create(RepositoryType repositoryType)
{
switch(repositoryType)
{
case RepositoryType.MsSql:
return new MsSqlRepository();
break;
case RepositoryType.Postgres:
return new PostgresRepository();
break;
//a lot more possible types
}
}
}
который вызывается на основе параметров из запроса HTTP:
public ActionResult MyAction()
{
var repoType = RepositoryType.MsSql; //Actually determined from HTTP request, could be any type.
var repository = RepositoryFactory.Create(repoType);
}
так что я действительно хотел сделать, это рефакторинг так, что мой контроллер выглядит следующим образом:
[Inject]
public ActionResult MyAction(IRepository repository)
Но так как RepositoryType
может меняться по каждому запросу, я не могу понять, как использовать условную привязку ninject, чтобы это произошло. Я знаю, как использовать условную привязку вообще, например Bind<IRepository>().ToMethod()
и Bind<IRepository>().To<MsSqlRepository>().WhenInjectInto()
и т. Д., Но я не могу понять, что делать, когда условие привязки поступает из внешнего источника.
пожалуйста, показать весь код, как вы определяете тип запроса HTTP. Наверное, вы пытаетесь обратиться к HTTP-запросу статически? Доступен ли он при наличии конструктора класса? – BatteryBackupUnit