首页 > 解决方案 > 将 TResponse 转换为 IRequestPostProcessor 中的 Response 类

问题描述

我是 C# 新手,我需要一些帮助才能在 mediatr 中实现 IRequestPostProcessor。

我有一个后处理器行为,TResponse 始终是包装另一个对象(数据)的通用响应类。在 NullUnauthorizedPropsBehaviour 中,我需要访问 Response 属性以迭代 Data 属性以获取它们的属性。

public class NullUnauthorizedPropsBehaviour<TRequest, TResponse> : IRequestPostProcessor<TRequest, TResponse> 
    {
        public Task Process(TRequest request, TResponse response, CancellationToken cancellationToken)
        {
            // I need TResponse to be casted to Response class in order to access to its properties

            return Task.CompletedTask;
        }
    }

我的 Response 类是通用的:

public class Response<T>
    {
        public Response()
        {
        }

        public Response(T data, string message = null)
        {
            Succeeded = true;
            Message = message;
            Data = data;
        }

        public Response(string message)
        {
            Succeeded = false;
            Message = message;
        }

        public bool Succeeded { get; set; }
        public string Message { get; set; }
        public List<string> Errors { get; set; }
        public T Data { get; set; }
    }

不知道怎么弄,求大神帮忙?

标签: c#mediatr

解决方案


您不希望response参数完全通用 - 您希望它只是一种Response<>类型。

public class NullUnauthorizedPropsBehaviour<TRequest, TResponse> : 
    IRequestPostProcessor<TRequest, TResponse>
{
    public Task Process(TRequest request, Response<TResponse> response, 
        CancellationToken cancellationToken)
}

这里的关键是将response参数类型从更改TResponseResponse<TResponse>

现在TResponse表示Response类的数据,而不是整个响应对象。

方法中的response对象(参数)现在可以访问Response级别成员,like.Succeeded等等。


推荐阅读