0

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

kernel.Bind<IRepository>().To<CachedRepository>().InSingletonScope();
kernel.Bind<IRepository>().To<DbRepository>().InSingletonScope().Named("db");

这个想法是,如果我没有指定名称,那么就会创建 CachedRepository,如果我需要一个面向 DB 的,那么我会使用 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 的存储库创建新接口的情况下实现我想要的?谢谢

4

2 回答 2

0

The [Named] attribute as shown in the wiki should work.

BTW stay away from anything other than ctor injection!

于 2013-04-20T07:46:09.013 回答
0

看起来你不能做你正在尝试的事情,我刚刚遇到了同样的问题,除了找到你的问题,我还找到了 Ninject Remo Gloor的作者回答的这个问题。

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

虽然Remo没有明确表示无法做到,但他的回答是命名两个绑定(或使用自定义属性绑定,数量相同)。

于 2013-08-14T19:30:34.040 回答