MiR
实体仓库扩展
IMirPositionRepository
MiR项目对Rcs的Position 仓库进行了扩展。 如果获取站点列表只会显示MiR和Rcs的。
建议在项目中使用IMirPositionRepository替换默认站点实体仓库。
[ExposeServices(typeof(IMirPositionRepository))]
public class MirPositionRepository : PositionRepository, IMirPositionRepository
{
public MirPositionRepository(IDbContextProvider<IRcsDbContext> dbContextProvider, IPathRepository pathRepository)
: base(dbContextProvider, pathRepository)
{
}
public override async Task<IQueryable<Position>> GetQueryableAsync()
{
var query = await base.GetQueryableAsync();
query = query.Where(p => p.DataSource == MirConsts.DataSource || p.DataSource == RcsConsts.DataSource);
return query;
}
}
如果使用IMirPositionRepository 的仓库获取Position则只会获取MiR系统内的。以下测试用例展示了效果。
[Fact]
public async Task GetListAsync_DataSource_Mir_ShouldWork()
{
await WithUnitOfWorkAsync(async () =>
{
var map = await _mapManager.CreateAsync("123");
await _mapRepository.InsertAsync(map);
var rcsPosition = new Position(Guid.NewGuid().ToString(), "123", 1.1f, 1.2f, 1.3f, map.Id, PositionType.Normal, "MiR");
var rcsPosition2 = new Position(Guid.NewGuid().ToString(), "123", 1.1f, 1.2f, 1.3f, map.Id, PositionType.Normal, "Normal");
await _positionRepository.InsertAsync(rcsPosition, autoSave: true);
await _positionRepository.InsertAsync(rcsPosition2, autoSave: true);
var list = await _mirPositionRepository.GetListAsync();
list.Count.ShouldBe(1);
list = await _positionRepository.GetListAsync();
list.Count.ShouldBe(2);
});
}
以下测试用例展示了效果。
[Fact]
public async Task GetListAsync_ShouldWork()
{
var mirRobots = await _mirRobotRepository.GetListAsync();
mirRobots.Count.ShouldBe(1);
var robots = await _robotRepository.GetListAsync();
robots.Count.ShouldBe(2);
}
IMirRobotRepository
MiR项目对Rcs的Robot仓库进行了扩展。 如果获机器人列表只会显示MiR的。
[ExposeServices(typeof(IMirRobotRepository))]
public class MirRobotRepository : RobotRepository, IMirRobotRepository
{
public MirRobotRepository(IDbContextProvider<IRcsDbContext> dbContextProvider)
: base(dbContextProvider)
{
}
public override async Task<IQueryable<Robot>> GetQueryableAsync()
{
var query = await base.GetQueryableAsync();
query = query.Where(r => r.Brand == MirConsts.Brand);
return query;
}
}
Service扩展
MiR项目Rcs的RobotAppService进行扩展,获取机器人时,只显示Mir牌的机器人。
[ExposeServices(typeof(IMirRobotAppService))]
public class MirRobotAppService : RobotAppService, IMirRobotAppService
{
public MirRobotAppService(IMirRobotRepository repository, RobotManager robotManager)
: base(repository, robotManager)
{
}
}
以下代码展示了IMirRobotAppService的示例。
[Fact]
public async void GetAllAsync_ShouldWork()
{
var mirRobots = await _mirRobotAppService.GetAllAsync();
mirRobots.Items.Count.ShouldBe(1);
var robots = await _robotAppService.GetAllAsync();
robots.Items.Count.ShouldBe(2);
}