能否将现有的解析器传递到对象方法的扩展中,这样我就可以重用解析器了吗?在执行查询时,我得到“意外执行错误:”没有为'UserPreferenceResolver‘类型注册任何服务。因此,我假设我需要在方法签名上执行一些di或标记解析器。
“用户”和"UserPreferences“分别存储,它是一对一的关系。我并不总是想两者都要,我已经为两个对象创建了一个解析器。现在已经提出了一个新的要求,要求同时提取两个对象,因此我创建了一个UserModelExtention对象来组合它们。单个解析器工作正常,并返回数据。然而,当尝试使用对象ExtentionMethod“测试”时,我会得到错误。
示例代码
public class UserModel
{
public Guid Id { get; set; }
public string Name { get;set; }
}
public class UserPreferenceModel
{
public Guid UserId { get;set; }
public bool AllowSms { get; set; }
public bool AllowEmail { get; set; }
}
[ExtendObjectType(typeof(UserModel))]
public class UserModelExtention
{
public async Task<UserPreferenceModel> Test([Parent] UserModel parent, [Service]
UserPreferenceResolver userPreferenceResolver)
{
return await
userPreferenceResolver.GetUserPreferenceByIdAsync(default,parent.Id);
}
}
[ExtendObjectType(typeof(Query))]
public class UserResolver
{
private readonly IMapper _mapper;
public UserResolver(IMapper mapper)
{
_mapper = mapper;
}
public async Task<UserModel> GetUserByIdAsync([Service] IUnifiedPortalRequestService uPService, Guid userId)
{
return _mapper.Map<UserModel>(await uPService.GetUser(userId.ToString()));
}
}
[ExtendObjectType(typeof(Query))]
public class UserPreferenceResolver
{
private readonly IMapper _mapper;
public UserPreferenceResolver(IMapper mapper)
{
_mapper = mapper;
}
public async Task<UserPreferenceModel> GetUserPreferenceByIdAsync([Service] INotificationAPIService notificationAPIService, Guid userId)
{
return _mapper.Map<UserPreferenceModel>(await notificationAPIService.GetUserPreference(userId));
}
} Query {
UserById(userId:""){
name
Test {
AllowEmail
}
}
}很高兴知道我想要做的事情是否可能,如果是的话,是如何做到的?
发布于 2022-04-29 07:29:33
因此,我发现了一个解决方案,我可以将IResolverContext context传递到方法中,然后使用context.Resolver<UserPreferenceResolver>();
public async Task<UserPreferenceModel> Test(
[Parent] UserModel parent,
IResolverContext context,
[Service] INotificationAPIService notificationAPIService
)
{
var resolver = context.Resolver<UserPreferenceResolver>();
return _mapper.Map<UserPreferenceModel>(
await resolver.GetUserPreferenceByIdAsync(notificationAPIService, parent.Id)
);
}https://stackoverflow.com/questions/72054215
复制相似问题