dependency-injection - Ninject 会自动注入(inject)非绑定(bind)类吗?

标签 dependency-injection ninject

public class MyController : Controller
{
   private MyClass _class;

   public MyController(MyClass class)
   {
       this._class = class;
   }
}

public class MyClass
{
      // stuff
}

我的 Ninject 连接到实现 IController 的注入(inject)类。 (Controller 类这样做)。但是,我没有绑定(bind)MyClass对任何东西,然而Ninject仍在注入(inject)MyClass进入 MyController .

我想我的问题是,为什么它会注入(inject)一些我没有绑定(bind)到任何东西的东西? Ninject 是否会找到带有签名 MyClass 的类? ?如果我的构造函数需要 MyBaseClass,我认为这种行为会有所不同。我的程序集中有两个类继承自 MyBaseClass ?

最佳答案

在 Ninject V1 中,ImplicitSelfBinding 是一个顶级配置设置(默认为 true IIRC)。

在 V2 中,您观察到的隐式自绑定(bind)行为更加紧密地连接在一起(尽管有一些方法可以将其关闭——就像 Ninject 的大多数位一样,它非常精细且最小化)。在 V2 中,默认行为是,如果不存在其他绑定(bind),则始终生成具体类型的自绑定(bind)。您通常执行 Bind<Concrete>().ToSelf() 的唯一时间是自定义绑定(bind),例如执行 .InSingletonScope()

请参阅此 answer by @Remo Gloor 以了解在 V2+ 中将其关闭的方法。

立即在源代码中为 ImplicitSelfBinding 做一个 grep - 虽然它比人们喜欢阅读要容易得多!

也不要忘记在 ninject.org 上查看 Ninject.Extensions.Conventions 和测试,以将 Bind() 的隐式 I*X* 设置为 *X*
(正如 Steven 所暗示的,如果您将 MyClass 类更改为 abstract ,Ninject 将不会自我绑定(bind)。)

关于dependency-injection - Ninject 会自动注入(inject)非绑定(bind)类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3846839/

相关文章:

c# - 统一.NET : List of dependencies

c# - 使用 if 接口(interface)

c# - Ninject InRequestScope 丢失

c# - 在 ASP.NET MVC3 模型绑定(bind)器中使用依赖注入(inject)

asp.net-mvc-3 - Structuremap、AutoFac 或 Ninject,哪一个适合大型 Web 应用程序?

php - 如何在遗留应用程序中使用 Symfony 2 容器

java - 如何使用带动态参数的 spring DI 构造函数

java - 何时和何时不使用 IOC/依赖注入(inject)?

asp.net-mvc - 没有为此对象定义无参数构造函数。注入(inject) + MVC 5

asp.net-mvc - ASP.NET MVC 4 中的每个请求都没有命中 ActionFilterAttribute