跳到主要内容

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);
}