命名绑定 - MVC3

时间:2013-04-19 23:01:18

标签: ninject ninject.web.mvc

我正在尝试使用命名实例注册到相同接口的实现

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的存储库创建新界面? THX

2 个答案:

答案 0 :(得分:0)

[Named]属性as shown in the wiki应该有效。

除了注射剂外,BTW远离其他任何东西!

答案 1 :(得分:0)

看起来你不能做你正在尝试的事情,我只是遇到了同样的问题,并且找到了你的问题我也发现了这个问题,Ninject的作者Remo Gloor回复了。

https://stackoverflow.com/a/4051391/495964

虽然Remo没有明确表示无法完成,但他的答案是命名两个绑定(或使用自定义attribute binding,相同的事情。)