# 业务逻辑层 在这里主要实现项目业务逻辑,原则上不能在【Wood.Service】中直接写需要的业务逻辑,这里是系统自带的一些业务的实现,可以新建一个Service,对其进行引用。这里有两种Service父类,一个Manager父类,Service实现里边的方法会被注册为接口,Manager实现则会被自动依赖注入。 ### ApiCRUDService 这个父类提供了简单增删改查实现,继承了之后,自动提供简单增删改查接口,如有需要可以在子类中重写,实现自己的功能。 - T:实体 - TDTO:实体Detail查询的dto - TAddParam:新增参数 - TUpdateParam:更新参数 - 提供方法: - GetDetail 获取单个明细 - Add 新增 - Update 修改 - Delete 删除 接受数组参数,支持批量删除 ```csharp /// /// 职位管理 /// public class PositionService : ApiCRUDService { public PositionService(SqlSugarRepository repository) : base(repository) { } /// /// 分页查询职位 /// /// /// public async Task> Paged(PositionPagedParam param) { return await _repository.AsQueryable() .WhereIF(!string.IsNullOrEmpty(param.Name), it => it.PositionName.Contains(param.Name!) || it.FormCode.Contains(param.Name!)) .ToPagedListAsync(param); } } ``` ### ApiService 这个父类标记目标类为需要注册为api,这个父类里边没有任何实现,当然你也可以自定义实现。 ```csharp /// /// 用户管理 /// public class UserService : ApiService { ...... } ``` ### ApiManager Manager用于封装一些在service中反复需要使用的功能。对实体进行Manager封装后,只用注入Manager即可,不需要再注入Repository。 - T:entity实体 - 封装Manager后必须要标注,注入类型,当然所有标注这些注入类型的类都会被自动扫描注入。 - IScoped 注册为Scoped - ITransient 注册为Transient - ISingleton 注册为Singleton - ApiManager中的方法 - AsQueryable() 获取 ISugarQueryable - AsRepository() 获取 SqlSugarRepository ```csharp // 用户管理 ,瞬时生命周期注入 public class UserManager : ApiManager, ITransient { ...... } ``` ### 一些接口说明 继承这些接口会实现相应的功能 - IScoped 注册为Scoped - ITransient 注册为Transient - ISingleton 注册为Singleton - IDiff 标记,记录差异日志,用于实体 - IntegrationEvent 事件总线,事件类型 - IntegrationEventHandler 事件处理器,T:(IntegrationEvent实现类) - IEventLog 标记,记录事件日志,用于开启记录目标事件的事件日志