[Play with T]_[C# 类操作] 简化范型方法

 public abstract class ServiceAgentBase<TService>
    {
        private readonly IServiceClientFactory _factory;

        protected ServiceAgentBase(IServiceClientFactory factory)
        {
            Guard.ArgumentNotNull(factory, "factory");
            _factory = factory;
        }

        protected void Work(Action<TService> work)
        {
            Guard.ArgumentNotNull(work, "work");

            Work<object>(service =>
            {
                work(service);
                return null;
            });
        }

        protected TResult Work<TResult>(Func<TService, TResult> work)
        {
            Guard.ArgumentNotNull(work, "work");

            var client = _factory.Create<TService>();
            var communicationObject = client as ICommunicationObject;

            return communicationObject != null ? communicationObject.Using(c => work((TService)c)) : work(client);
        }
    }

首先有如上的base类,

接着在我们定义子类时:

    public class SalesCompanyPsiHandlingServiceAgent : ServiceAgentBase<ISalesCompanyPsiHandlingService>,
                                                       ISalesCompanyPsiHandlingService
    {
        public SalesCompanyPsiHandlingServiceAgent(IServiceClientFactory factory)
            : base(factory)
        {
        }

        // ARCH: サービスインターフェースの各メソッドの実装では、基底クラスの Work メソッドを呼び出し、
        //       そこに渡すデリゲートの中で受け取ったサービスインターフェースのインスタンスに処理を移譲する。
        public SalesCompanyPsiDto[] Find(ModelSearchConditionDto condition)
        {
            return Work(service => service.Find(condition));
        }

        public void Store(SalesCompanyPsiDto[] salesCompanyPsisToCreate, SalesCompanyPsiDto[] salesCompanyPsisToUpdate)
        {
            Work(service => service.Store(salesCompanyPsisToCreate, salesCompanyPsisToUpdate));
        }
    }
在Find方法中,我们直接返回work,因为TService已经赋值,所以我们用service来代表TService,

通过lamda表达式,就能将IServicexxx的接口类型参数转换为DTO类型参数并整个实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值