浏览器对应用程序的根URL发出请求时所发生的情况(结合 DI)

时间:2023-03-10 08:50:14
浏览器对应用程序的根URL发出请求时所发生的情况(结合 DI)

  1. 浏览器向 MVC 框架发送一个请求 Home 的 URL,MVC 准备创建 HomeController 类的实例。

  2. MVC 框架在创建 HomeController 类实例过程中会发现其构造器有一个对 IValueCalculator 接口的依赖项。—— 于是会要求依赖项解析器(NinjectDependencyResolver)对此依赖项进行解析。(将该接口指定为依赖项解析器中 GetService 方法所使用的类型参数)

  3. 依赖项解析器会将传递过来的类型参数交给 TryGet 方法,要求 Ninject 创建一个新的 HomeController 接口类实例。

  4. Ninject 会检测到 HomeController 构造器与其实现类 LinqValueCalculator 具有绑定关系,于是为该接口创建一个 LinqValueCalculator 类实例,并将其回递给依赖项解析器。

  然后,依赖项解析器将 Ninject 所返回的 LinqValueCalculator 类作为 IValueCalculator  接口实现类实例回递给 MVC 框架。

  再然后,MVC 框架利用依赖项解析器返回的接口类实例创建 HomeController 控制器实例,并使用该控制器实例对请求进行服务

    这里所采取的办法其好处之一是,任何控制器都可以在应用程序中声明一个解析器,并由 MVC 框架使用 Ninject 来实现。

    所得到的最大好处是,在希望用另一个实现来代替 LinqValueCalculator 时,只需要对依赖项解析器类进行修改。