首页 > Web开发 > 详细

.Net Core 3.0 内置依赖注入:举例

时间:2019-11-22 21:26:03      阅读:322      评论:0      收藏:0      [点我收藏+]
原文:.Net Core 3.0 内置依赖注入:举例

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_42829302/article/details/103069603

本文根据蔚来汽车.Net 开发部  罗霄老师的分享 进行整理,在这里声明,表示感谢。

 本文讲解如何使用.Net Core 3.0的内置依赖(Microsoft.Extensions.DependencyInjection),而不是使用第三方的依赖注入的插件。

实例生命周期的形态:

            Transient:容器获取的实例都是全新创建的。使用方法:AddTransient<TClass,Class>
            Scoped:在每次http请求都会创建一个新的实例 AddScoped<TClass,Class> :
            Singleton:单例:始终都是一个实例:AddSingleton<TClass,Class>,

通过一个支付实例来讲解内置依赖:

通过一个简单地下订单和支付来一步步的讲解如何使用内置依赖。

1、使用.net core 3.0 创建一个web项目。

技术分享图片

2、选择API程序,.NET Core 3.0,取消HTTS安全协议

技术分享图片

3、创建一个Order(下订单)控制器。

技术分享图片

4、创建一个参数模型,防止以后修改

  1. namespace Order.Model
  2. {
  3. public class OrderItem
  4. {
  5. public string PayType { get; set; }
  6. }
  7. }

创建一个控制器,并创建一个方法CreateOrder();

  1. namespace Order.Controllers
  2. {
  3. [Route("api/[controller]")]//路由格式
  4. [ApiController]
  5. public class OrderController : ControllerBase
  6. {
  7. [HttpPost]//Post请求
  8. [Route("CreateOrder")]//路由名
  9. public string CreateOrder([FromBody]OrderItem orderItem)//自动匹配参数体
  10. {
  11. return $"我使用{orderItem.PayType}方式支付。";//返回string类型的参数
  12. }
  13. }
  14. }

调用:

技术分享图片

返回结果:

技术分享图片

5、为实现控制翻转,创建一个接口文件夹和一个实现文件夹,一个IPaymentService接口和两个AliPayService、WechatPayService实现类,并继承接口

技术分享图片

接口:

  1. public interface IPaymentService
  2. {
  3. string Pay();
  4. }

实现类:

  1. public class WechatPayService : IPaymentService
  2. {
  3. public string Pay()
  4. {
  5. return "Wechat支付成功";
  6. }
  7. }
  1. public class AliPayService : IPaymentService
  2. {
  3. public string Pay()
  4. {
  5. return "AliPay支付成功";
  6. }
  7. }

6、注册,接口和实现类的注册在startup.cs中的

  1. public void ConfigureServices(IServiceCollection services)
  2. {
  3. services.AddTransient<IPaymentService, WechatPayService>();//注入wechatpay,每次调用都创建一个新的实例
  4. services.AddTransient<IPaymentService, AliPayService>();//注入alipay,每次调用都创建一个新的实例
  5. services.AddControllers();
  6. }

7、通过构造方法进行解析

  1. [Route("api/[controller]")]
  2. [ApiController]
  3. public class OrderController : ControllerBase
  4. {
  5. private readonly IPaymentService _paymentService;
  6. public OrderController(IPaymentService paymentService)
  7. {
  8. _paymentService = paymentService;
  9. }
  10. [HttpPost]
  11. [Route("CreateOrder")]
  12. public string CreateOrder([FromBody]OrderItem orderItem)
  13. {
  14. string payResult = _paymentService.Pay();
  15. return $"我使用{orderItem.PayType}方式支付,支付结果为:{payResult}";
  16. }
  17. }

8、调用测试

技术分享图片

这时候就出现错误了,我们明明试行用微信支付,最后调用了alipay的实现类,那么未解决这个问题,我们在接口中定义一个Name属性,用于表示实现类。然后在实现类中将其实现。

9、实现解析不同的类:

添加Name属性

  1. public interface IPaymentService
  2. {
  3. /// <summary>
  4. /// 标识实现类
  5. /// </summary>
  6. public string Name { get; }
  7. string Pay();
  8. }
  1. public class AliPayService : IPaymentService
  2. {
  3. public string Name => "aliPay";
  4. public string Pay()
  5. {
  6. return "AliPay支付成功";
  7. }
  8. }
  1. public class WechatPayService : IPaymentService
  2. {
  3. public string Name => "wechatPay";
  4. public string Pay()
  5. {
  6. return "Wechat支付成功";
  7. }
  8. }

将接口解析为IEnumerable<IPaymentService>

然后再去根据Name,使用Linq去解析特定的支付实现类。然后在调用方法即可

  1. [Route("api/[controller]")]
  2. [ApiController]
  3. public class OrderController : ControllerBase
  4. {
  5. private readonly IEnumerable<IPaymentService> _paymentServiceList;
  6. public OrderController(IEnumerable<IPaymentService> paymentService)
  7. {
  8. _paymentServiceList = paymentService;
  9. }
  10. [HttpPost]
  11. [Route("CreateOrder")]
  12. public string CreateOrder([FromBody]OrderItem orderItem)
  13. {
  14. IPaymentService paymentService = _paymentServiceList.FirstOrDefault(pay => pay.Name == orderItem.PayType);
  15. string payResult = paymentService.Pay();
  16. return $"我使用{orderItem.PayType}方式支付,支付结果为:{payResult}";
  17. }
  18. }

最终测试:

技术分享图片

技术分享图片

至此,.net Core 3.0内置依赖就实现了。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4、定义一个参数模型,防止参数会不断修改

5、创建一个接口文件夹和一个实现类文件夹,并创建两个接口和两个支付方式(wechat、alipay)

6、使用控制器的构造方法获得支付实例。

7、创建支付接口

.Net Core 3.0 内置依赖注入:举例

原文:https://www.cnblogs.com/lonelyxmas/p/11913785.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!