流浪のwolf

卷帝

导航

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

如无必要,不要增加实体 ;

posted on 2023-09-02 16:26  流浪のwolf  阅读(64)  评论(0编辑  收藏  举报