# 业务逻辑层
在这里主要实现项目业务逻辑,原则上不能在【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 标记,记录事件日志,用于开启记录目标事件的事件日志