Именная привязка - 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.

/questions/14128716/v-ninject-20-kak-u-menya-est-obschaya-privyazka-i-privyazka-dlya-konkretnogo-sluchaya/14128724#14128724

Хотя Remo Gloor прямо не сказал, что это невозможно, его ответ состоял в том, чтобы назвать обе привязки (или использовать привязку пользовательских атрибутов, составляющую одно и то же).

Другие вопросы по тегам