提问人:J Moss 提问时间:8/25/2023 最后编辑:J Moss 更新时间:8/25/2023 访问量:68
C# - 尝试为不同的处理程序返回泛型类型 T
C# - Trying to return a generic type T for different handlers
问:
目标:
- 在 Program.cs 中,我调用不同的命令处理程序,但我希望它们返回 - 因此每个命令处理程序都可以返回自己的类型 T
CustomerResponse<T>
客户响应:
public class CustomerResponse<T>
{
public T Response { get; set; } // so other handlers can return their own response
}
ICommandHandler:
public interface ICommandHandler
{
CustomerRespone<T> Handle<T>(T details);
}
命令处理程序:
public interface CustomerCommandHandler : ICommandHandler
{
// injecting our service in ctor
public CustomerResponse<T> Handle<T>(T details)
{
// result is of type CustomerResponse<Operation> but we can't return directly
// because it can't be implicitly casted to CustomerResult<T>
var result = _customerService.CustomerOperation(details);
// doesn't do what i expect it to do at runtime
return (CustomerResponse<T>)(object)result;
}
}
程序.cs:
var result = _customerHandler.Handle(CustomerDetails details);
问题:
- 程序.cs中的结果类型将是
CustomerDetails
- 所以我会得到一个 type 的转换错误
CustomerResponse<Operation>
CustomerResponse<CustomerDetails>
- 我们想回来
CustomerResponse<Operation>
这样我们就可以有多个处理程序,这些处理程序可以返回自己的 CustomerResponse
答:
-1赞
Georg
8/25/2023
#1
你的接口只指定了一件事:每当你输入一个类型的东西时,你都会得到一个 类型的响应。如果您的实现想要接收一个对象并创建一个 ,则它无法实现此接口。ICommandHandler
T
CustomerReponse<T>
CustomerDetails
CustomerResponse<Operation>
在我看来,返回类型似乎确实取决于您实际执行的命令类型,因此,您不能创建单个接口作为保护伞。要执行后者,您必须转到更通用的命令模式。
评论