英文:
How to pass array of objects type in MediatoR patterns?
问题
希望你一切都好!
我正在使用MediatoR设计模式,在其中我想将集合数组作为控制器中的对象接受。之前我是将其作为单一对象使用的,但现在我该如何允许MediatoR接受数组作为参数。
从:
public async Task<ActionResult<ServiceResponse<int>>>
AddField(**AddFieldCommand** objFieldCommand)
到:
public async Task<ActionResult<ServiceResponse<int>>>
AddField(**AddFieldCommand[]** objFieldCommand)
我尝试过这样做,但出现以下错误:
错误 CS0311 类型 'Application.Commands.Fields.AddFieldCommand[]' 无法用作泛型类型或方法 'IRequestHandler<TRequest, TResponse>' 中的类型参数 'TRequest'。不存在从 'Application.Commands.Fields.AddFieldCommand[]' 到 'MediatR.IRequest<Application.Common.ServiceResponse<int>>' 的隐式引用转换。 Application C:\Users\Admin\Documents\Projects\Source Code\Application\Commands\Fields\AddFieldCommand.cs 28 Active
public class AddFieldCommandHandler : IRequestHandler<AddFieldCommandAggregate, ServiceResponse<int>>
{
private readonly IFieldsService _fieldService;
public AddFieldCommandHandler(IFieldsService fieldService)
{
_fieldService = fieldService;
}
public async Task<ServiceResponse<int>> Handle(AddFieldCommandAggregate request, CancellationToken cancellationToken)
{
return await _fieldService.AddField(request: request, cancellationToken: cancellationToken);
}
}
错误出现在标记为粗体的行,该行为 public class AddFieldCommandHandler。任何人能帮忙吗?
英文:
Hope You are doing well!
I am using MediatoR design pattern in which i want to accept array of collections as an object in my controller. Earlier i was using as a single object but now how can i allow the MediatoR to accept array as parameter.
From:
public async Task<ActionResult<ServiceResponse<int>>>
AddField(**AddFieldCommand** objFieldCommand)
To:
public async Task<ActionResult<ServiceResponse<int>>>
AddField(**AddFieldCommand[]** objFieldCommand)
I tried doing this but it is giving me the below error:
Severity Code Description Project File Line Suppression State
Error CS0311 The type 'Application.Commands.Fields.AddFieldCommand[]' cannot be used as type parameter 'TRequest' in the generic type or method 'IRequestHandler<TRequest, TResponse>'. There is no implicit reference conversion from 'Application.Commands.Fields.AddFieldCommand[]' to 'MediatR.IRequest<Application.Common.ServiceResponse<int>>'. Application C:\Users\Admin\Documents\Projects\Source Code\Application\Commands\Fields\AddFieldCommand.cs 28 Active
public class AddFieldCommandHandler : IRequestHandler<AddFieldCommandAggregate, ServiceResponse<int>>
{
private readonly IFieldsService _fieldService;
public AddFieldCommandHandler(IFieldsService fieldService)
{
_fieldService = fieldService;
}
public async Task<ServiceResponse<int>> Handle(AddFieldCommandAggregate request, CancellationToken cancellationToken)
{
return await _fieldService.AddField(request: request, cancellationToken: cancellationToken);
}
}
error comes in line public class AddFieldCommandHandler which is marked as bold.
Can any one please help me?
答案1
得分: 1
根据您的设置,我怀疑您有一个处理器接受AddFieldCommand
并调用某个方法来处理它。现在您可能希望执行一个循环来处理所有项。
所以我怀疑您大致有类似于以下的代码:
public async Task Handle(AddFieldCommand data)
{
// 这里包含了所有的逻辑
PerformAction(data);
}
所以现在需要进行重构,如下所示:
public async Task Handle(AddFieldCommandAggregate multiData)
{
foreach(var data in multiData.Data)
{
// 这里包含了所有的逻辑
PerformAction(data);
}
}
您还需要定义一个聚合类:
public class AddFieldCommandAggregate
{
public AddFieldCommand[] Data { get; set; }
}
英文:
By your setup i suspect you have some handler that accepts AddFieldCommand
and invokes some method with it. Now you want to perform most probably a loop to handle all items.
So i suspect you roughly have code similar to this:
public async Task Handle(AddFieldCommand data)
{
// here you have all the logic
PerformAction(data);
}
so now this would be needed to be refactored to:
public async Task Handle(AddFieldCommandAggregate multiData)
{
foreach(var data in mulitData.Data)
{
// here you have all the logic
PerformAction(data);
}
}
and you would need to define aggregate class:
public class AddFieldCommandAggregate
{
public AddFieldCommand[] Data { get; set; }
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论