项目案例【Net Core】如何注入多个服务实现类
需求
库表保存时,需要校验逻辑.
提交时有更深层次校验.
**状态,还有特殊校验
接口
写一个通用的校验接口,这里定义了校验时间.每个阶段校验可能需要考虑顺序,增加一个顺序字段.
public interface IOrcderCheck
{
ECheckTime CheckTime { get; }
bool Check(OrderModel orderModel, List<string> warnMsg); /// <summary>
/// 校验排序,默认制定为0即可
/// </summary>
int SortNum { get; }
}
实现类2个
public class CheckAge : IOrcderCheck
{
public ECheckTime CheckTime => ECheckTime.BeforeSign;
/// <summary>
/// 校验排序,默认制定为0即可
/// </summary>
public int SortNum { get { return ; } }
public bool Check(OrderModel orderModel, List<string> warnMsg)
{
//内部逻辑 如:年龄小于18岁,校验失败
return true;
}
}
public class CheckCaStatus : IOrcderCheck
{
/// <summary>
/// 校验排序,默认制定为0即可
/// </summary>
public int SortNum { get { return ; } }
public ECheckTime CheckTime => ECheckTime.BeforeSubmit;
DataAccess _da;
IDBContext _db;
CfcaManager _cfcaManager;
IUserInfoRepository _userInfoRepository;
public CheckCaStatus(IIndex<string, DataAccess> daArr, IIndex<string, IDBContext> dbArr,CfcaManager cfcaManager,IUserInfoRepository userInfoRepository)
{
this._da = daArr["acs"];
this._db = dbArr["acs"];
this._cfcaManager = cfcaManager;
this._userInfoRepository = userInfoRepository;
}public bool Check(OrderModel orderModel, List<string> warnMsg)
{
if (CheckDelStatus(orderModel))
{
warnMsg.Add("此申请已被删除,无法提交");
return false;
}
//判断是否电子签成功
var orderId = orderModel.OrderId;
var res= this._cfcaManager.CheckCaForSubmit(orderId, ECaCategory.Camain);
if(res.Value==)
{
return true;//电子签成功
}
if(res.WarnResult!=null)
{
warnMsg.Add(res.WarnResult.Message); //不完全电子签的,提示完成电子签
}
else
{
warnMsg.Add("请完成协议签署后再提交");
}
return warnMsg.Count == ;
} }
注册封装
扩展IServiceCollection 接口方法 AddCheckRules,注册校验类 校验入口
ValidateOrderData
传入校验实体类和校验时间
orderModel, eCheckTime
public static class OrderCheckServiceCollectionExtensions
{ public static IServiceCollection AddCheckRules(this IServiceCollection services)
{
if (services == null)
{
throw new ArgumentNullException(nameof(services));
} services.AddSingleton<IOrcderCheck, CheckAge>();//计算年龄+贷款 > 65
services.AddSingleton<IOrcderCheck, CheckCaStatus>();//电子签名状态校验 判断删除状态 return services;
}
/// <summary>
/// 通用订单提交校验入口.
/// </summary>
/// <param name="rules"></param>
/// <param name="orderModel"></param>
/// <param name="eCheckTime"></param>
/// <returns></returns>
public static List<string> ValidateOrderData(this IEnumerable<IOrcderCheck> rules, OrderModel orderModel, ECheckTime eCheckTime)
{
List<string> warnMsg = new List<string>(); var newRules = rules.Where(r => r.CheckTime <= eCheckTime).OrderBy(o => o.SortNum);
foreach (var rule in newRules)
{ if (!rule.Check(orderModel, warnMsg))
break;
}
return warnMsg;
} }
调用
注册
services.AddCheckRules();
构造注入
IEnumerable<IOrcderCheck> _orderChecks;
public OrderCRepository(
IEnumerable<IOrcderCheck> orderChecks
)
{
this._orderChecks = orderChecks;
}
函数调用
这里直接使用函数,判断校验类错误信息.
var msg = _orderChecks.ValidateOrderData(orderModel, ECheckTime.BeforeSubmit);
if (msg.Count > )
{
return new WarnResult(string.Join('|', msg));
}
项目案例【Net Core】如何注入多个服务实现类的更多相关文章
- ASP.NET Core依赖注入多个服务实现类
依赖注入在 ASP.NET Core 中起中很重要的作用,也是一种高大上的编程思想,它的总体原则就是:俺要啥,你就给俺送啥过来. 服务类型的实例转由容器自动管理,无需我们在代码中显式处理. 因此,有了 ...
- 【ASP.NET Core】依赖注入高级玩法——如何注入多个服务实现类
依赖注入在 ASP.NET Core 中起中很重要的作用,也是一种高大上的编程思想,它的总体原则就是:俺要啥,你就给俺送啥过来.服务类型的实例转由容器自动管理,无需我们在代码中显式处理. 因此,有了依 ...
- NET 5 依赖注入多个服务实现类
依赖注入在 ASP.NET Core 中起中很重要的作用,也是一种高大上的编程思想,它的总体原则就是:俺要啥,你就给俺送啥过来. 服务类型的实例转由容器自动管理,无需我们在代码中显式处理. 因此,有了 ...
- ASP.NET Core依赖注入系统学习教程:关于服务注册使用到的方法
在.NET Core的依赖注入框架中,服务注册的信息将会被封装成ServiceDescriptor对象,而这些对象都会存储在IServiceCollection接口类型表示的集合中,另外,IServi ...
- # ASP.NET Core依赖注入解读&使用Autofac替代实现
标签: 依赖注入 Autofac ASPNETCore ASP.NET Core依赖注入解读&使用Autofac替代实现 1. 前言 2. ASP.NET Core 中的DI方式 3. Aut ...
- .NET 4.5+项目迁移.NET Core的问题记录
.NET 4.5+项目迁移.NET Core的问题记录 这几天试着把目前的开发框架迁移到新的.net core平台,中间遇到的问题在这里简单记录一下. 迁移过程遇到的最大的问题IOC容器.我目前使用的 ...
- NET Core依赖注入解读&使用Autofac替代实现
NET Core依赖注入解读&使用Autofac替代实现 标签: 依赖注入 Autofac ASPNETCore ASP.NET Core依赖注入解读&使用Autofac替代实现 1. ...
- 实现BUG自动检测 - ASP.NET Core依赖注入
我个人比较懒,能自动做的事绝不手动做,最近在用ASP.NET Core写一个项目,过程中会积累一些方便的工具类或框架,分享出来欢迎大家点评. 如果以后有时间的话,我打算写一个系列的[实现BUG自动检测 ...
- 全面理解 ASP.NET Core 依赖注入
DI在.NET Core里面被提到了一个非常重要的位置, 这篇文章主要再给大家普及一下关于依赖注入的概念,身边有工作六七年的同事还个东西搞不清楚.另外再介绍一下.NET Core的DI实现以及对实例 ...
随机推荐
- Android版数据结构与算法(四):基于哈希表实现HashMap核心源码彻底分析
版权声明:本文出自汪磊的博客,未经作者允许禁止转载. 存储键值对我们首先想到HashMap,它的底层基于哈希表,采用数组存储数据,使用链表来解决哈希碰撞,它是线程不安全的,并且存储的key只能有一个为 ...
- 5.JAVA-内部类实例
在JAVA中,类内部可以添加其它类,当然也可以实现类继承(后续章节学习). 本章示例-实现部门类和雇员类 可以通过部门对象,查找该部门的雇员信息. 可以通过雇员对象,查找该雇员所在的部门信息 代码如下 ...
- arcgis api 4.x for js 结合 react 入门开发系列"esri-loader"篇(附源码下载)
基于上篇的介绍,虽然有比较esri-loader.@arcgis/webpack-plugin,还是觉得有必要需要讲述一下“esri-loader”的开发模式,待大家体验后也会有更直观的感受.本篇文章 ...
- [Android 除錯] Conflict with dependency
Android Studio build 時的錯誤訊息 : Conflict with dependency 詳細錯誤訊息 : Conflict with dependency 'com.androi ...
- react-router详细解释
react-router的理解 react的一个插件库,专门用来实现一个SPA应用(单页Web应用(single page web application,SPA)整个应用只有一个完整的页面,点击页面 ...
- python word转pdf
原理 使用python win32 库 调用word底层vba,将word转成pdf 安装pywin32 pip install pywin32 python代码 from win32com.clie ...
- softmax函数详解
答案来自专栏:机器学习算法与自然语言处理 详解softmax函数以及相关求导过程 这几天学习了一下softmax激活函数,以及它的梯度求导过程,整理一下便于分享和交流. softmax函数 softm ...
- eShopOnWeb 知多少
1.引言 eShopOnWeb是基于ASP.NET Core构建,官方创建这样一个示例项目的目的,我想无非以下几点: 推广ASP.NET Core 指导利用ASP.NET Core如何进行架构设计 普 ...
- Linux2:Linux目录结构
Linux目录图 进入根目录,使用ll命令看一下Linux整个根目录图: 这里面所有的目录都是买完服务器之后最初始的目录,没有进过任何加工.Linux以树的结构组织所有目录,用一张图表示一下Linux ...
- [AI分享]零高数理解人工智能和深度学习