Asp.net mvc Ninject 3多个绑定

Asp.net mvc Ninject 3多个绑定,asp.net-mvc,ninject,ninject-3,Asp.net Mvc,Ninject,Ninject 3,我的问题实际上是这里发布的一个老问题的重复: 2011年似乎有人要处理这个问题。有人知道有没有办法在Ninject中关闭此类警告?或者其他解决办法 编辑 对于@BatteryBackupUnit,我的问题是: 我有多个图书馆。。。在我的核心库中,我做了如下工作: 查找主机应用程序(包括主机)引用的所有程序集 查找从所有这些程序集中继承自IDependency的所有类型 自动将所有这些注册为瞬态 然后从另一个库(主机应用程序可能会引用,也可能不会引用)中,我得到以下信息: Kernel.Bind

我的问题实际上是这里发布的一个老问题的重复:

2011年似乎有人要处理这个问题。有人知道有没有办法在Ninject中关闭此类警告?或者其他解决办法

编辑

对于@BatteryBackupUnit,我的问题是:

我有多个图书馆。。。在我的核心库中,我做了如下工作:

  • 查找主机应用程序(包括主机)引用的所有程序集
  • 查找从所有这些程序集中继承自
    IDependency
    的所有类型
  • 自动将所有这些注册为瞬态
  • 然后从另一个库(主机应用程序可能会引用,也可能不会引用)中,我得到以下信息:

    Kernel.Bind<IDbContextFactory>().To<DbContextFactory>().InSingletonScope();
    
    Kernel.Bind().To().InSingletonScope();
    
    这里的
    IDbContextFactory
    也是一个
    IDependency
    ,因此它已经被核心库加载,现在我在这里注册它,但使用不同的作用域(singleton)

    根据经验(以及之前的测试),我知道这在Autofac中是没有问题的,但Ninject给了我关于已经注册它的错误消息


    理想情况下,最好只是覆盖以前的任何注册。。。“层叠风格”(缺少更好的短语)

    Ninject现在支持用更具体的绑定覆盖打开的泛型绑定。 例如:

    public interface IFoo<T> { }
    public class Foo<T> : IFoo<T> { }
    public class StringFoo : IFoo<string> {}
    
    公共接口IFoo{}
    公共类Foo:IFoo{}
    公共类StringFoo:IFoo{}
    
    用法如下:

    var kernel = new StandardKernel();
    kernel.Bind(typeof(IFoo<>)).To(typeof(Foo<>));
    kernel.Bind<IFoo<string>>().To<StringFoo>();
    
    var intFooInstance = kernel.Get<IFoo<int>>();
    var stringFooinstance = kernel.Get<IFoo<string>>();
    
    var-kernel=new-StandardKernel();
    Bind(typeof(IFoo)).To(typeof(Foo));
    kernel.Bind().To();
    var intFooInstance=kernel.Get();
    var stringFooinstance=kernel.Get();
    
    工作

    但是,如果您不是在谈论开放的泛型绑定,那么ninject 3仍然与ninject 2.2一样处理多绑定

    在大多数情况下,您可以通过使用上下文绑定来解决这个问题。好吧,我不会确切地说这是一个解决办法,我会说这是一个好的设计。 一般情况下,这里描述了这一点:

    一种简单的方法是使用名称指定绑定。这需要为指定的绑定创建一个绑定,并且也只允许一个绑定。 见:

    也可以定义“默认”绑定,如
    .Bind().to()。When(…)
    语法的代码>和特殊情况绑定,如:

    .Bind().To().When(ctx=>…)


    如果您向我们展示您的具体问题,我们可能能够提供更具体的解决方案。

    据我所知,您无法做到“覆盖注册级联样式”——至少不容易做到。然而,我想知道
    IDependency
    的价值是什么。这个接口是用来做什么的?我猜想,通过使用不同的设计,您可以轻松地解决这个难题,而不会使整个软件复杂化。