Day 05 依赖注入(Dependency Injection)

问题来了,为什麽Blazor会知道WeatherForecastService在这里可以调用?

day03有提到Startup.cs的ConfigureServices的目的就是「设定服务」,Controller把资料回传这件事情就是一种服务,我们点开Startup.cs,可以在ConfigureServices找到一行程序
services.AddSingleton<WeatherForecastService>();
把这行字拿掉,重整网页,可以看到这样的错误讯息,因为我们试图在FetchData.razor调用WeatherForecastService,却没告诉Blazor我们要注册这个服务。
https://ithelp.ithome.com.tw/upload/images/20210905/20140893202kmuR48k.png

不过这并不是day03说到的依赖注入,依赖注入的目的是摆脱高层级程序必须相依於低层级程序的窘境,以减少耦合性。举例来说,如果今天FetchData.razor要呼叫其他Service例如NewWeatherForecastService的同名方法GetForecastAsync,取回10笔资料,那只要用到WeatherForecastService的地方都必须修改,目前因为范例的关系不多所以没感觉,如果日後有10几20几个地方要改呢?

这时候就是依赖注入发挥功能的时候了,先定义一个介面
interface IWeatherForecastService
https://ithelp.ithome.com.tw/upload/images/20210905/20140893OTiMRaOODz.png
里面就写我们要的方法
Task<WeatherForecast[]> GetForecastAsync(DateTime startDate);
也不用实作(虽然介面也不能实作),接着让WeatherForecastServiceNewWeatherForecastService继承IWeatherForecastService
https://ithelp.ithome.com.tw/upload/images/20210905/20140893R4JSv3eJvj.pnghttps://ithelp.ithome.com.tw/upload/images/20210905/20140893RQt3xlDeB4.png
Startup.cs改用IWeatherForecastServiceNewWeatherForecastService注册
https://ithelp.ithome.com.tw/upload/images/20210905/20140893MA170iZMeK.png
最後在FetchData.razor改为注入IWeatherForecastService
https://ithelp.ithome.com.tw/upload/images/20210905/20140893kcJtqgFfWX.png
重整网页就能看到资料笔数变为10笔了
https://ithelp.ithome.com.tw/upload/images/20210905/20140893N67RI9K4UE.png

依赖注入的核心观念就是「对某个功能的依赖性是透过注入的方式」,不直接呼叫底层程序,而是呼叫底层程序的介面,即便底层程序更动也不会导致所有呼叫该程序的呼叫端都必须改动。

注:由於笔者是在写完这篇之後才想起来生命周期,原本想用git rebase的功能回到这一次的commit新增范例,但会有git断头疑虑,所以笔者会在day 07再说明生命周期,若有不便敬请见谅。


<<:  D4: [漫画]工程师太师了-第2.5话

>>:  全端入门Day05_何谓全端之後端首篇

浅谈特权模式与模式切换

恐龙书上的 User Mode 与 Kernel Mode 在恐龙书中有提到,作业系统一般会在 Us...

Day29 - 铁人付外挂部署与发行(二)- 部署正式机

当我们在测试机确认过金流功能皆能正常运作後,接下来就是要把我们开发的外挂上传客户主机的时候了,在上传...

Day 28 - Build a Experimental Video Speed Controller UI

前言 JS 30 是由加拿大的全端工程师 Wes Bos 免费提供的 JavaScript 简单应用...

Day 03:如何分析演算法?

上一回讲到两种搜寻演算法,一种是一个一个找,一种则是每次寻找都可以去掉一半的选项,好像有一种是明显比...

[day30][後记] 什麽都略懂一点,生活更多彩一些。

同步发表到驴形笔记 什麽都略懂一点,生活更多彩一些。 经过这ㄧ系列跑下来,应该有摸索到各式各样的新...