【发布时间】:2021-10-14 06:09:52
【问题描述】:
我正在 Net 5 中创建一个 RESTful api,根据说明我必须创建使用它们的存储库和服务。逻辑必须在服务中。
我拥有的服务是:
子组服务 群组服务
我遇到的问题是我生成了一个循环引用,因为在 GroupsService 我需要一个 SubGroupsService 的方法,而 SubGroupsService 我需要一个 GroupsService 的方法。
将GroupsService服务注入SubGroupsService没有问题,但是将SubGroupsService注入GroupsService会产生循环引用。
请您告诉我如何解决此类问题,因为我对依赖注入没有太多经验。
子组服务
public class SubGroupService: ISubGroupService
{
private readonly ISubGroupRepository _SubGroupRepository;
private readonly IGroupService _GroupService;
public SubGroupService(
ISubGroupRepository SubGroupRepository,
IGroupService GroupService
{
_SubGroupRepository = SubGroupRepository;
_GroupService = GroupService;
}
public async Task InsertSubGroupService(Subgroup subgroup)
{
var group = await _GroupService.GetGroupService(subgroup.idgroup);
if (group != null)
{
await _SubGroupRepository.InsertSubGroupRepository(subgroup);
}
else
{
throw new BusinessException("This group not exists");
}
}
public async Task<Subgroups> GetSubGroupService(int idgroup)
{
return await _SubGroupRepository.GetSubGroupRepository(idgroup);
}
}
团体服务
public class GroupService : IGroupService
{
private readonly ISubGroupService _SubGroupService;
private readonly IGroupRepository _GroupRepository;
public GroupService(
ISubGroupService SubGroupService,
IGroupRepository GroupRepository)
{
_SubGroupService = SubGroupService;
_GroupRepository = GroupRepository;
}
public async Task<bool> DeleteGroupService(int Idgroup)
{
var existsSubGroup = await _SubGroupRepository(Idgroup);
if(existsSubGroup == null)
{
return await _GroupRepository.DeleteGroupRepository(Idgroup);
}
}
public async Task<Groups> GetGroupService(int Idgroup)
{
return await _GroupRepository.GetGroupRepository(Idgroup);
}
}
接口:
public interface IGroupService
{
Task<Groups> GetGroupsService(int Idgroup);
Task<bool> DeleteGroupService(int Idgroup);
}
public interface ISubGroupService
{
Task<Subgroups> GetSubGroupService(int idsubgrupo);
Task InsertSubgroupService(Subgroup subgroup);
}
【问题讨论】:
-
如果
GroupService同时实现了IGroupService和ISubGroupService会怎样?还是那不可能? -
以及为什么在
SubGroupService中需要_SubGroupRepository等等... -
_SubGroupService在您的示例中未使用。如果服务方法只是调用存储库方法,为什么不直接调用存储库呢?或者将该服务的实现移至扩展方法。 -
如果这只是一个服务和一个接口怎么办?不确定我完全理解你想要什么,但如果这是一个树结构,每个组都可以有子组,每个组都是一个子组。您可以添加一个方法来获取根组。
-
你不应该处于这种情况,如果你有这样的循环依赖,你的服务很可能做错了事情,你的担忧是混乱的。这又是一个陷阱年轻玩家会陷入构思不良和被错误吹捧的存储库hokey pokey
标签: c# dependency-injection .net-5