Asp.net mvc ASP.NET MVC在不使用任何DI代码的情况下解析具体类型

Asp.net mvc ASP.NET MVC在不使用任何DI代码的情况下解析具体类型,asp.net-mvc,asp.net-mvc-4,dependency-injection,ninject,Asp.net Mvc,Asp.net Mvc 4,Dependency Injection,Ninject,我有一个依赖于ImageReader和ImageWriter的控制器。我正在使用构造函数注入将这些类型注入控制器: public class MyController { private readonly ImageReader _imageReader; private readonly ImageWriter _imageWriter; public MyController(ImageReader imageReader, ImageWriter imageWri

我有一个依赖于
ImageReader
ImageWriter
的控制器。我正在使用构造函数注入将这些类型注入控制器:

public class MyController
{
    private readonly ImageReader _imageReader;
    private readonly ImageWriter _imageWriter;

    public MyController(ImageReader imageReader, ImageWriter imageWriter)
    {
        _imageReader = imageReader;
        _imageWriter = imageWriter;
    }

    // more code ...
}
ImageReader
ImageWriter
的分类没有依赖性(即,它们可以在没有任何构造函数参数的情况下进行初始化)

问题

我的代码运行得非常好。。。但我刚刚意识到我忘记在我的DI代码中注册
ImageReader
(使用Ninject):

公共静态类NinjectWebCommon
{
//一些代码。。。。
私有静态无效注册服务(IKernel内核)
{
//我忘了在这里包括ImageReader
kernel.Bind().ToSelf().InRequestScope();
}
}
代码怎么可能运行良好?ASP.NET MVC知道如何独立解析具体类型吗


我正在使用ASP.NET MVC 4和.NET 4.6

多亏@Nkosi的评论,我找到了答案

这是因为Ninject的:

如果您正在解析的类型是具体类型(如上面的武士), Ninject将通过 称为隐式自绑定的机制。就好像有一个 注册方式如下:

Bind().To()


在我上面的例子中,由于
ImageReader
是一个具体类型,ninject会自动解析它。

我认为ninject默认返回到Activator,用于无依赖项初始化的具体类。只有在这种情况下,它才会与transient相同,因为每个请求都将使用一个新实例。我假设您正在使用Ninjects IDependencyResolver实现。请检查,非常感谢@Nkosi。这就解释了。我以为是MVC解决了这个问题。。。事实证明,这是一件令人讨厌的事。为了证明这一点。将一个注入的依赖项更改为接口,并且不注册它。它会爆炸的。
public static class NinjectWebCommon
{
    // some code....

    private static void RegisterServices(IKernel kernel)
    {
        // I had forgotten to include ImageReader here
        kernel.Bind<ImageWriter>().ToSelf().InRequestScope();
    }
}