word文檔怎么做網(wǎng)站跳轉(zhuǎn)鏈接關鍵詞排名優(yōu)化官網(wǎng)
綜合案例1
需求說明
1、目的:演示DI的能力;
2、有配置服務、日志服務,然后再開發(fā)一個郵件發(fā)送器服務??梢酝ㄟ^配置服務來從文件、環(huán)境變量、數(shù)據(jù)庫等地方讀取配置,可以通過日志服務來將程序運行過程中的日志信息寫入文件、控制臺、數(shù)據(jù)庫等。
3、說明:案例中開發(fā)了自己的日志、配置等接口,這只是在揭示原理,.NET有現(xiàn)成的,后面講。
實現(xiàn)1
1、創(chuàng)建三個.NETCore類庫項目,ConfigServices是配置服務的項目,LogServices是日志服務的項目,Mailservices是郵件發(fā)送器的項目,然后再建一個.NETCore控制臺項目MailServicesConsole來調(diào)用MailServices。MailServices項目引用ConfigServices項目和LogServices項目,而MailServicesConsole項目引用MailServices項目。
2、編寫類庫項目LogServices,創(chuàng)建ILogProvider接口。編寫實現(xiàn)類ConsoleLogProvider。編寫一個ConsoleLogProviderExtensions定義擴展方法AddConsoleLog,namespace和IServiceCollection一致
實現(xiàn)2
1、編寫配置服務的類庫項目ConfigServices。接口IConfigProvider,方法:stringGetValue(string name).2、環(huán)境變量讀取配置類EnvVarConfigProvider:Environment.GetEnvironmentVariable(name);編寫一個類帶擴展方法:AddEnvVarConfig3、編寫從ini文件中讀取配置的類ConfigServices。
新建控制臺項目
新建類庫項目
日志服務
logServices 接口
實現(xiàn)類
配置服務
添加實現(xiàn)類
郵件服務
需要添加日志引用
控制臺項目添加 郵件服務得引用
添加IMailServices 接口
Nuget 導入包 ,引入命名空間
控制臺測試
運行結(jié)果:
綜合案例2
新建配置實現(xiàn)類:
新建配置文件
編寫實現(xiàn)類 代碼(讀取ini 文件)
主類:
運行結(jié)果:
方式二 更簡單的方法
希望提供一個add 方法
使用擴展方法
添加一個擴展方法
使用:
運行結(jié)果:
改寫ini配置文件讀取:
調(diào)用
運行結(jié)果:
綜合案例3
實現(xiàn)3
1、“可覆蓋的配置讀取器”。配置中心服務器。可以本地的覆蓋配置服務器的,或者配置文件覆蓋環(huán)境變量的。例如,按照“配置中心服務器”、“本地環(huán)境變量”、“本地配置文件”的順序添加了三個配置提供者,在“配置中心服務器”中提供了“a=1;b=2;c=3”這三個配置項,在“本地環(huán)境變量”中配置了“a=10;b=20;”,在“本地配置文件”中配置了“b=200”,那么最終我們讀取的時候讀到的就是’a=10;b=200;c=3;’
2、定義一個從各個ConfigProvider中讀取項的IConfigReader接口。編寫實現(xiàn)類LayeredconfigReader。
示例:
實現(xiàn)類:
擴展方法:
更改MailService
調(diào)用
運行結(jié)果:
添加環(huán)境變量
運行結(jié)果:
改變后運行
運行結(jié)果
總結(jié)
關注于接口,而不是關注于實現(xiàn),各個服務可以更弱耦合的協(xié)同工作。在編寫代碼的時候,我們甚至都不知道具體的服務是什么。
第三方DI容器:Autofac等。Autofac優(yōu)點:支持屬性注入基于名字注入、基于約定的注入等。