C#依赖注入
namespace WebApplication1 { public class 依赖注入 { // 很多的服务都是相互依赖的 .net 的默认 DI 是构造函数注入 默认不支持属性注入 // DI的生命周期 // 构造函数注入:在对象创建的时候就把需要的依赖注入 // 使用邮件发送 MailKit 开源项目 ServiceCollection services = new ServiceCollection(); // services.AddScoped<>(服务的接口Iservice,服务的实现方法IML); // 只有这样注册了服务才能使用构造函数的DI //using (var sp = services.BuildServiceProvider()) //{ // // ps:mailService中使用了构造函数引入了日志和配置服务 所以是第一个对象 使用 GetRequireService 注册根对象 // // 第一个根对象只能使用 ServiceLocator // var mailService = sp.GetRequireService<MailService>(); // mailService.send() ; // 直接调用邮件服务的send 方法 //} } }
扩展方法的类都是publice static
DI 是IOC的具体实现 ;IOC 控制反转
可覆盖的配置服务, 配置文件 ,环境变量,配置服务器 ;逐层覆盖 ;
ps:扩展方法的添加 :依据namespace 的可添加性,和在js中的原型上添加方法类似 ;
第三方的DI容器:Autifac 等,优点:支持属性注入,基于名字注入,基于约定的注入等 ;额外:Ninject ,Spring.Net
如无必要,不要增加实体 ;