杨中科 ASP.NET DI综合案例

综合案例1

需求说明

1、目的:演示DI的能力;
2、有配置服务、日志服务,然后再开发一个邮件发送器服务。可以通过配置服务来从文件、环境变量、数据库等地方读取配置,可以通过日志服务来将程序运行过程中的日志信息写入文件、控制台、数据库等。
3、说明:案例中开发了自己的日志、配置等接口,这只是在揭示原理,.NET有现成的,后面讲。

实现1

1、创建三个.NETCore类库项目,ConfigServices是配置服务的项目,LogServices是日志服务的项目,Mailservices是邮件发送器的项目,然后再建一个.NETCore控制台项目MailServicesConsole来调用MailServices。MailServices项目引用ConfigServices项目和LogServices项目,而MailServicesConsole项目引用MailServices项目。
2、编写类库项目LogServices,创建ILogProvider接口。编写实现类ConsoleLogProvider。编写一个ConsoleLogProviderExtensions定义扩展方法AddConsoleLog,namespace和IServiceCollection一致

实现2

1、编写配置服务的类库项目ConfigServices。接口IConfigProvider,方法:stringGetValue(string name).2、环境变量读取配置类EnvVarConfigProvider:Environment.GetEnvironmentVariable(name);编写一个类带扩展方法:AddEnvVarConfig3、编写从ini文件中读取配置的类ConfigServices。

新建控制台项目
杨中科 ASP.NET DI综合案例_第1张图片
新建类库项目
杨中科 ASP.NET DI综合案例_第2张图片
日志服务
logServices 接口
杨中科 ASP.NET DI综合案例_第3张图片

实现类
杨中科 ASP.NET DI综合案例_第4张图片
配置服务
杨中科 ASP.NET DI综合案例_第5张图片
添加实现类
杨中科 ASP.NET DI综合案例_第6张图片

邮件服务

需要添加日志引用
杨中科 ASP.NET DI综合案例_第7张图片

控制台项目添加 邮件服务得引用
杨中科 ASP.NET DI综合案例_第8张图片

添加IMailServices 接口
杨中科 ASP.NET DI综合案例_第9张图片

Nuget 导入包 ,引入命名空间
杨中科 ASP.NET DI综合案例_第10张图片

控制台测试
杨中科 ASP.NET DI综合案例_第11张图片

运行结果:
杨中科 ASP.NET DI综合案例_第12张图片

综合案例2

新建配置实现类:
杨中科 ASP.NET DI综合案例_第13张图片

新建配置文件
杨中科 ASP.NET DI综合案例_第14张图片
杨中科 ASP.NET DI综合案例_第15张图片
杨中科 ASP.NET DI综合案例_第16张图片
编写实现类 代码(读取ini 文件)
杨中科 ASP.NET DI综合案例_第17张图片
主类:
杨中科 ASP.NET DI综合案例_第18张图片

运行结果:
在这里插入图片描述

方式二 更简单的方法

希望提供一个add 方法
杨中科 ASP.NET DI综合案例_第19张图片
使用扩展方法
添加一个扩展方法
杨中科 ASP.NET DI综合案例_第20张图片

使用:
杨中科 ASP.NET DI综合案例_第21张图片
运行结果:
杨中科 ASP.NET DI综合案例_第22张图片
改写ini配置文件读取:
杨中科 ASP.NET DI综合案例_第23张图片
调用
杨中科 ASP.NET DI综合案例_第24张图片
运行结果:
杨中科 ASP.NET DI综合案例_第25张图片

综合案例3

实现3

1、“可覆盖的配置读取器”。配置中心服务器。可以本地的覆盖配置服务器的,或者配置文件覆盖环境变量的。例如,按照“配置中心服务器”、“本地环境变量”、“本地配置文件”的顺序添加了三个配置提供者,在“配置中心服务器”中提供了“a=1;b=2;c=3”这三个配置项,在“本地环境变量”中配置了“a=10;b=20;”,在“本地配置文件”中配置了“b=200”,那么最终我们读取的时候读到的就是’a=10;b=200;c=3;’
2、定义一个从各个ConfigProvider中读取项的IConfigReader接口。编写实现类LayeredconfigReader。

示例:
杨中科 ASP.NET DI综合案例_第26张图片
实现类:

杨中科 ASP.NET DI综合案例_第27张图片
杨中科 ASP.NET DI综合案例_第28张图片
扩展方法:
杨中科 ASP.NET DI综合案例_第29张图片
更改MailService
杨中科 ASP.NET DI综合案例_第30张图片
调用
杨中科 ASP.NET DI综合案例_第31张图片
运行结果:
杨中科 ASP.NET DI综合案例_第32张图片
添加环境变量
杨中科 ASP.NET DI综合案例_第33张图片

运行结果:
杨中科 ASP.NET DI综合案例_第34张图片
改变后运行
杨中科 ASP.NET DI综合案例_第35张图片
运行结果
杨中科 ASP.NET DI综合案例_第36张图片

总结

关注于接口,而不是关注于实现,各个服务可以更弱耦合的协同工作。在编写代码的时候,我们甚至都不知道具体的服务是什么。
第三方DI容器:Autofac等。Autofac优点:支持属性注入基于名字注入、基于约定的注入等。

你可能感兴趣的:(ASP.NET,数据库,.netcore,asp.net,后端,c#)