小编Rob*_*ert的帖子

使用Structuremap装饰通用接口

我有一个通用接口,它有两种泛型类型.我想装饰所有返回的版本,但由于我在调用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)

.net c# structuremap

5
推荐指数
1
解决办法
1732
查看次数

标签 统计

.net ×1

c# ×1

structuremap ×1