Именная привязка - MVC3
Я пытаюсь зарегистрироваться для реализации того же интерфейса, используя именованные экземпляры
kernel.Bind<IRepository>().To<CachedRepository>().InSingletonScope();
kernel.Bind<IRepository>().To<DbRepository>().InSingletonScope().Named("db");
идея заключается в том, что если я не укажу имя, то будет создан CachedRepository, если мне нужен объект, ориентированный на БД, то я бы использовал атрибут Named, но это жалкое неудача, когда создается простой объект
public class TripManagerController : Controller
{
[Inject]
public IRepository Repository { get; set; } // default Cached repo must be created
public TripManagerController()
{
ViewBag.LogedEmail = "test@test.com";
}
}
ошибка
Ошибка активации IRepository Доступно более одного сопоставления. Путь активации: 2) Внедрение зависимости IRepository в хранилище параметров конструктора типа TripManagerController 1) Запрос на TripManagerController
Предложения: 1) Убедитесь, что вы определили привязку для IRepository только один раз.
Есть ли способ достичь того, чего я хочу, без создания нового интерфейса для BD-ориентированных репозиториев? Спасибо
2 ответа
[Named]
атрибут, как показано в вики, должен работать.
Кстати, держитесь подальше от всего, кроме впрыска ctor!
Казалось бы, вы не можете делать то, что пытаетесь, я только что столкнулся с той же проблемой и, кроме того, что нашел ваш вопрос, я также нашел этот вопрос, на Remo Gloor ответил автор Ninject Remo Gloor.
Хотя Remo Gloor прямо не сказал, что это невозможно, его ответ состоял в том, чтобы назвать обе привязки (или использовать привязку пользовательских атрибутов, составляющую одно и то же).