我實際上使用通用請求/響應成功。
訣竅是將已關閉的通用請求/響應註冊爲已知類型。 爲了達到這個目的,我使用了以下約定:
- 通用請求/響應只能有一個泛型參數
- 是通用的參數應該有一個通用的約束指定它應該實現給定接口
我正在使用這個約定來構造每個可能的封閉泛型類型 ,我將要使用它作爲請求或響應。 例如,我能有這樣的事情:
interface IDtoWithId
{
int Id { get; }
}
public class GetEntityRequest<TDto> : Request where TDto : IDtoWithId
{
....
}
public class UserDto : IDtoWithId
{
public int Id { get; set; }
public string Name { get; set; }
}
然後,配置阿加莎的時候,我使用的是像這樣 和https://gist.github.com/916352做:
....
configuration.Initialize();
KnownTypeProvider.ClearAllKnownTypes();
KnownTypeHelper.RegisterRequestsAndResponses(typeof(UserDto).Assembly);
的KnownTypeHelper註冊GetEntityRequest類型一個 已知類型,並允許我處理該請求使用處理器 層次結構如下:
public abstract class GetEntityHandler<TEntity, TDto> :
RequestHandler<GetEntityRequest<TDto>, GetEntityResponse<TDto>>
{
...
}
public class GetUserHandler : GetEntityHandler<User, UserDto>
{
}
我對應用程序的CRUD部分使用這種方法,它的工作效果非常好。