项目案例【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实现以及对实例 ...
随机推荐
- Eclipse4JavaEE安装SpringBoot
第一步:下载SpringBoot SpringBoot官网下载链接 第二步:在Eclipse里进行安装 打开Eclipse,菜单栏Help ->Install New Software,进入下图 ...
- Dynamics 365 CE中使用FetchXML进行聚合运算
微软动态CRM专家罗勇 ,回复328或者20190429可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me! Dynamics 365 Customer Engagement ...
- 全球第一免费开源ERP Odoo工业互联网生产制造功能模块术语解析
物料清单 物料清单(BoM)用于描述物料.每种物料的数量.以及制造某一产品所需的步骤.由于行业和成品性质的不同,同一个文件可能有不同的命名.例如,在制药行业中,可以使用术语“处方”. 周期 产品周期是 ...
- 泛微oa几个常用的js
泛微OA,常用JS 为满足一些简单需求,我从网上借鉴了大量的代码,其中几个是非常好用的. (1).取值判断 通过jQuery('#field1234').val()取字段的值,field1234对应字 ...
- sqlite数据库如何远程连接?
sqlite数据库如何远程连接代码如下:QSqlDatabase db =QSqlDatabase::addDatabase("QSQLITE"); db.setHostName( ...
- Windows To Go入坑记录
什么是Windows To Go? https://en.wikipedia.org/wiki/Windows_To_Go 微软为了解决企业用户的需求而推出,可以在u盘或者移动硬盘启动window系统 ...
- 分布式理论 之 CAP 定理
-----------------------------------------------------入巷间吃汤面 笑看窗边飞雪. 目录: 什么是 CAP 定理 为什么只能 3 选 2 能不能解决 ...
- 超级简单!把文档转换成网页格式(Core)
因为需要把好多的文档放在服务器上访问,最开始是使用第3方网站www.aconvert.com,这个其实也挺方便的, 最后由于一些需求原因,最终只有依靠代码来进行,以下是简化后的代码 创建一个控制台应用 ...
- NewBuiltBottomSheetDialog【新建底部对话框】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 演示在底部选项卡上方弹出底部对话框效果. 效果图 代码分析 NewBuiltBottomSheetDialog继承BottomShe ...
- Flink从入门到放弃(入门篇1)-Flink是什么
戳更多文章: 1-Flink入门 2-本地环境搭建&构建第一个Flink应用 3-DataSet API 4-DataSteam API 5-集群部署 6-分布式缓存 7-重启策略 8-Fli ...