我正在尝试使用命名实例注册到相同接口的实现
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
答案 0 :(得分:0)
[Named]
属性as shown in the wiki应该有效。
答案 1 :(得分:0)
看起来你不能做你正在尝试的事情,我只是遇到了同样的问题,并且找到了你的问题我也发现了这个问题,Ninject的作者Remo Gloor回复了。
https://stackoverflow.com/a/4051391/495964
虽然Remo没有明确表示无法完成,但他的答案是命名两个绑定(或使用自定义attribute binding,相同的事情。)