我有一个通用接口,它有两种泛型类型.我想装饰所有返回的版本,但由于我在调用EnrichWith时不知道类型,它显然不能编译.我已经尝试使用在上下文中传递的EnrichWith重载,想想也许我可以获取传入的泛型类型并调用Activator.CreateInstance,但是在调试和检查它时,上下文没有任何有用的信息.
这是我到目前为止所拥有的.这是我的通用界面:
public interface IServiceOperation<in TRequest, out TResponse> where TResponse : ServiceResult, new()
{
TResponse PerformService(TRequest validatedRequest);
}
Run Code Online (Sandbox Code Playgroud)
这是一个示例实现:
public class SignUpService : IServiceOperation<SignUpRequest, SignUpResult>
{
private readonly IUserRepository _userRepo;
public SignUpService(IUserRepository userRepo)
{
_userRepo = userRepo;
}
public SignUpResult PerformService(SignUpRequest validatedRequest)
{
var user = Mapper.Map<User>(validatedRequest);
user.MarkAsLoggedIn();
user.ChangePassword(validatedRequest.UnhashedPassword);
using(var transaction = _userRepo.BeginTransaction())
{
_userRepo.Save(user);
transaction.Commit();
}
return new SignUpResult();
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的装饰者,也接受另一项服务:
public class ValidateServiceDecorator<TRequest, TResponse> : IServiceOperation<TRequest, TResponse> where TResponse : ServiceResult, new()
{
private readonly IServiceOperation<TRequest, TResponse> …Run Code Online (Sandbox Code Playgroud)