动态生成服务实现

本文关键字:实现 服务 动态 | 更新日期: 2023-09-27 18:08:21

在我的公司,我们的服务实现基本上只是将调用传递回业务层,业务层进行实际的处理。例如,如果我们有一个服务契约,看起来像这样:

public interface IService
{
    void ServiceMethod1(string a, object b);
    int ServiceMethod2(int a, int b);
}

我们的服务可能看起来像这样:

public class Service : IService
{
    private ServiceBL _serviceBL;
    public Service()
    {
        _serviceBL = new ServiceBL();
    }
    public void ServiceMethod1(string a, object b)
    {
        _serviceBL.ServiceMethod1(a, b);
    }
    public int ServiceMethod2(int a, int b)
    {
        return _serviceBL.ServiceMethod2(a, b);
    }
}

因为这变得相当重复,我想知道是否有一些基类我可以基于契约发出服务方法本身。我希望代码看起来像这样:

public abstract class MagicServiceBase<T>
{
    protected dynamic InterfaceImplementor { get; }
    public MagicServiceBase()
    {
        // Magic that makes the methods defined in T real.
    }
}
public class Service : MagicServiceBase<IService>, IService
{
    protected override dynamic InterfaceImplementor
    {
        get
        {
            return new ServiceBL();
        }
    }
}

是否有一种方法来创建这个,或者我只是试图太懒的合理性?

动态生成服务实现

你应该看看Agatha (http://davybrion.github.io/Agatha/)这是一个框架,它为您的服务删除了这种设置的要求。

你必须注册消息请求和响应,这是根据处理程序。
你可以使用这个框架来封装你需要的所有服务行为,并获得一个干净的处理逻辑分离。

一个实现干净wcf服务的伟大框架。而不是调用你的服务。方法。