.Net Core 3.0 内置依赖注入:举例
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了.Net Core 3.0 内置依赖注入:举例,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3378字,纯文字阅读大概需要5分钟。
内容图文
原文:.Net Core 3.0 内置依赖注入:举例本文根据蔚来汽车.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、创建一个参数模型,防止以后修改
- namespaceOrder.Model
- {
- publicclassOrderItem
- {
- publicstring PayType { get; set; }
- }
- }
创建一个控制器,并创建一个方法CreateOrder();
- namespaceOrder.Controllers
- {
- [Route("api/[controller]")]//路由格式
- [ApiController]
- publicclassOrderController : ControllerBase
- {
- [HttpPost]//Post请求
- [Route("CreateOrder")]//路由名
- publicstringCreateOrder([FromBody]OrderItem orderItem)//自动匹配参数体
- {
- return$"我使用{orderItem.PayType}方式支付。";//返回string类型的参数
- }
- }
- }
调用:
返回结果:
5、为实现控制翻转,创建一个接口文件夹和一个实现文件夹,一个IPaymentService接口和两个AliPayService、WechatPayService实现类,并继承接口
接口:
- publicinterfaceIPaymentService
- {
- stringPay();
- }
实现类:
- publicclassWechatPayService : IPaymentService
- {
- publicstringPay()
- {
- return"Wechat支付成功";
- }
- }
- publicclassAliPayService : IPaymentService
- {
- publicstringPay()
- {
- return"AliPay支付成功";
- }
- }
6、注册,接口和实现类的注册在startup.cs中的
- publicvoidConfigureServices(IServiceCollection services)
- {
- services.AddTransient<IPaymentService, WechatPayService>();//注入wechatpay,每次调用都创建一个新的实例
- services.AddTransient<IPaymentService, AliPayService>();//注入alipay,每次调用都创建一个新的实例
- services.AddControllers();
- }
7、通过构造方法进行解析
- [Route("api/[controller]")]
- [ApiController]
- publicclassOrderController : ControllerBase
- {
- privatereadonly IPaymentService _paymentService;
- publicOrderController(IPaymentService paymentService)
- {
- _paymentService = paymentService;
- }
- [HttpPost]
- [Route("CreateOrder")]
- publicstringCreateOrder([FromBody]OrderItem orderItem)
- {
- string payResult = _paymentService.Pay();
- return$"我使用{orderItem.PayType}方式支付,支付结果为:{payResult}";
- }
- }
8、调用测试
这时候就出现错误了,我们明明试行用微信支付,最后调用了alipay的实现类,那么未解决这个问题,我们在接口中定义一个Name属性,用于表示实现类。然后在实现类中将其实现。
9、实现解析不同的类:
添加Name属性
- publicinterfaceIPaymentService
- {
- ///<summary>
- /// 标识实现类
- ///</summary>
- publicstring Name { get; }
- stringPay();
- }
- publicclassAliPayService : IPaymentService
- {
- publicstring Name => "aliPay";
- publicstringPay()
- {
- return"AliPay支付成功";
- }
- }
- publicclassWechatPayService : IPaymentService
- {
- publicstring Name => "wechatPay";
- publicstringPay()
- {
- return"Wechat支付成功";
- }
- }
将接口解析为IEnumerable<IPaymentService>
然后再去根据Name,使用Linq去解析特定的支付实现类。然后在调用方法即可
- [Route("api/[controller]")]
- [ApiController]
- publicclassOrderController : ControllerBase
- {
- privatereadonly IEnumerable<IPaymentService> _paymentServiceList;
- publicOrderController(IEnumerable<IPaymentService> paymentService)
- {
- _paymentServiceList = paymentService;
- }
- [HttpPost]
- [Route("CreateOrder")]
- publicstringCreateOrder([FromBody]OrderItem orderItem)
- {
- IPaymentService paymentService = _paymentServiceList.FirstOrDefault(pay => pay.Name == orderItem.PayType);
- string payResult = paymentService.Pay();
- return$"我使用{orderItem.PayType}方式支付,支付结果为:{payResult}";
- }
- }
最终测试:
至此,.net Core 3.0内置依赖就实现了。
4、定义一个参数模型,防止参数会不断修改
5、创建一个接口文件夹和一个实现类文件夹,并创建两个接口和两个支付方式(wechat、alipay)
6、使用控制器的构造方法获得支付实例。
7、创建支付接口
原文:https://www.cnblogs.com/lonelyxmas/p/11913785.html
内容总结
以上是互联网集市为您收集整理的.Net Core 3.0 内置依赖注入:举例全部内容,希望文章能够帮你解决.Net Core 3.0 内置依赖注入:举例所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。