项目案例【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实现以及对实例 ...
随机推荐
- 使用myeclipse修改项目映射路径
这里主要做下记录,找到myeclipse中对项目路径进行查看以及修改的地址 如图 点击项目右键 实例url:http://localhost:8080/myFirstServlet/one 对应路径中 ...
- Main(string[] args)之args传递的几种方式
1.通过配置project属性传递.如图: 2.通过代码传递 3.通过命令行传递
- 【3】Asp.Net Core2.2新版管道处理模型
[前言] 上一篇完成了Asp.Net Core 2.2项目的一个最简单功能的添加,从控制器-视图-实体轻松交互了一下,感觉跟之前的MVC没啥差别!但这些都是在组件封装的基础上完成的,在Core里面,其 ...
- Google XSS Challenge
https://xss-game.appspot.com/level1 https://xss-game.appspot.com/level1 payload: <svg onload=aler ...
- SpringBoot2.0之六 多环境配置
开发过程中面对不同的环境,例如数据库.redis服务器等的不同,可能会面临一直需要修改配置的麻烦中,在以前的项目中,曾通过Tomcat的配置来实现,有的项目甚至需要手动修改相关配置,这种方式费时费力, ...
- ReactNative之结合具体示例来看RN中的的Timing动画
今天继续更新RN相关的博客.上篇博客详细的聊了RN中关于Flex布局的相关东西,具体请参见<ReactNative之参照具体示例来看RN中的FlexBox布局>.本篇博客继续更新RN的动画 ...
- Spring的PropertyPlaceholderConfigurer强制使用默认值的坑
1.问题 dubbo client配置: <dubbo:reference id="channelCustomerClient" interface="com.gt ...
- 4年前端、2年CTO:一个非科班程序员的真实奋斗史
1.引言 我,Scott,一家创业公司的 CTO. 从业6年却很少写文章,近一年来接触了几十个刚毕业的前端新人,也面试了100多个前端工程师和Nodejs工程师,对于前端发展的这个职业算是有些感触 ...
- 每日分享!~ JavaScript中面试基础--1,数组检测的方式 2.传统事件绑定和W3C标准绑定事件的区别~
javaScript 那些方式中检测数据类型 typeof typeof isNaN // 结果是function 检测数组的几种方式 instanceof arr instanceof Array( ...
- Entity Framework 之存储过程篇
最近几天在搞CRUD,使用的是EF这个ORM,最近的项目中上了存储过程,就把在开发中的经验分享出来!我们先创建一个最基本的存储过程,脚本如下,这是一个不带参数的存储过程,我们从最简单的往上走! cre ...