• ASP.NET Core IOC容器


    1. //IOC容器支持依赖注入
    2. {
    3. ServiceCollection serviceDescriptors = new ServiceCollection();
    4. serviceDescriptors.AddTransient<IMicrophone, Microphone>();
    5. serviceDescriptors.AddTransient<IPower, Power>();
    6. serviceDescriptors.AddTransient<IHeadphone, Headphone>();
    7. ServiceProvider serviceProvider =serviceDescriptors.BuildServiceProvider();
    8. IHeadphone headphone = serviceProvider.GetService<IHeadphone>();
    9. }

     

    1. AddTransient:瞬时生命周期,每一次创建都是是一个全新的实例
    2. ServiceCollection serviceDescriptors = new ServiceCollection();
    3. serviceDescriptors.AddTransient<IMicrophone, Microphone>();
    4. ServiceProvider serviceProvider =serviceDescriptors.BuildServiceProvider();
    5. IMicrophone microphone1 = serviceProvider.GetService<IMicrophone>();
    1. AddSingleton:单例生命周期:同一个类型,创建出来的是同一个实例
    2. ServiceCollection serviceDescriptors = new ServiceCollection();
    3. serviceDescriptors.AddSingleton<IMicrophone, Microphone>();
    4. ServiceProvider serviceProvider = serviceDescriptors.BuildServiceProvider();
    5. IMicrophone microphone1 = serviceProvider.GetService<IMicrophone>();
    1. AddScoped:作用域生命周期: 同一个serviceProvider获取到的是同一个实例
    2. ServiceCollection serviceDescriptors = new ServiceCollection();
    3. serviceDescriptors.AddScoped<IMicrophone, Microphone>();
    4. ServiceProvider serviceProvider1 = serviceDescriptors.BuildServiceProvider();
    5. IMicrophone microphone1 = serviceProvider1.GetService<IMicrophone>();

    ServiceCollection 抽象和具体之间多种注册方式

    1. {
    2. ServiceCollection serviceDescriptors = new ServiceCollection();
    3. serviceDescriptors.AddTransient<IMicrophone, Microphone>();
    4. ServiceProvider serviceProvider1 = serviceDescriptors.BuildServiceProvider();
    5. IMicrophone microphone1 = serviceProvider1.GetService<IMicrophone>();
    6. }
    7. {
    8. ServiceCollection serviceDescriptors = new ServiceCollection();
    9. serviceDescriptors.AddTransient(typeof(IMicrophone), typeof(Microphone));
    10. ServiceProvider serviceProvider1 = serviceDescriptors.BuildServiceProvider();
    11. IMicrophone microphone1 = serviceProvider1.GetService<IMicrophone>();
    12. }
    13. //注册抽象和一段业务逻辑
    14. {
    15. ServiceCollection serviceDescriptors = new ServiceCollection();
    16. serviceDescriptors.AddTransient(typeof(IPower), provider =>
    17. {
    18. //在这里可以我们自己来决定如何创建这个对象的实例;可以对创建出来的这个实例,可以做加工
    19. IMicrophone microphone = provider.GetService<IMicrophone>();
    20. return new Power(microphone);
    21. });
    22. serviceDescriptors.AddTransient(typeof(IMicrophone), typeof(Microphone));
    23. ServiceProvider serviceProvider1 = serviceDescriptors.BuildServiceProvider();
    24. IPower power = serviceProvider1.GetService<IPower>();
    25. }
    26. {
    27. ServiceCollection serviceDescriptors = new ServiceCollection();
    28. serviceDescriptors.AddTransient(typeof(Microphone));
    29. ServiceProvider serviceProvider1 = serviceDescriptors.BuildServiceProvider();
    30. Microphone microphone1 = serviceProvider1.GetService<Microphone>();
    31. }
    32. {
    33. ServiceCollection serviceDescriptors = new ServiceCollection();
    34. serviceDescriptors.AddTransient<Microphone>();
    35. ServiceProvider serviceProvider1 = serviceDescriptors.BuildServiceProvider();
    36. Microphone microphone1 = serviceProvider1.GetService<Microphone>();
    37. }

  • 相关阅读:
    Pytorch模型转ONNX部署
    神经网络控制法的工作原理,什么是神经网络控制
    Linux 后台运行 springboot项目
    Windows通过ssh免密登录Ubuntu (3)
    VPS、独服和云服务器哪种最适合您的业务?
    Greenplum-表分区
    Tkinter 转载 (来自C语言中文网)
    如果手机被偷了,里面的微信和支付宝绑定了银行卡,该怎么办?
    python:打印九九乘法表、直角三角形、等腰三角形、正方形
    每天几道Java面试题:集合(第四天)
  • 原文地址:https://blog.csdn.net/xionglifei2014/article/details/132566871