首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >热巧克力图QL.使用现有解析器c#扩展对象

热巧克力图QL.使用现有解析器c#扩展对象
EN

Stack Overflow用户
提问于 2022-04-29 07:23:25
回答 1查看 660关注 0票数 0

能否将现有的解析器传递到对象方法的扩展中,这样我就可以重用解析器了吗?在执行查询时,我得到“意外执行错误:”没有为'UserPreferenceResolver‘类型注册任何服务。因此,我假设我需要在方法签名上执行一些di或标记解析器。

“用户”和"UserPreferences“分别存储,它是一对一的关系。我并不总是想两者都要,我已经为两个对象创建了一个解析器。现在已经提出了一个新的要求,要求同时提取两个对象,因此我创建了一个UserModelExtention对象来组合它们。单个解析器工作正常,并返回数据。然而,当尝试使用对象ExtentionMethod“测试”时,我会得到错误。

示例代码

代码语言:javascript
复制
      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));
    
            }
    
        }
代码语言:javascript
复制
    Query {
              UserById(userId:""){
                  name
                 Test {
                 AllowEmail
               }
             } 
          }

很高兴知道我想要做的事情是否可能,如果是的话,是如何做到的?

EN

回答 1

Stack Overflow用户

发布于 2022-04-29 07:29:33

因此,我发现了一个解决方案,我可以将IResolverContext context传递到方法中,然后使用context.Resolver<UserPreferenceResolver>();

代码语言:javascript
复制
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)
    );
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72054215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档