动态生成服务实现

时间:2013-04-10 12:36:37

标签: c# wcf dynamic reflection

在我的公司,我们的服务实现基本上只是将调用传递回业务层,业务层执行实际处理。因此,例如,如果我们有一个如下所示的服务合同:

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();
        }
    }
}

有没有办法创造这个,或者我只是想懒得合理?

1 个答案:

答案 0 :(得分:0)

你应该看看阿加莎(http://davybrion.github.io/Agatha/) 这是一个框架,可以消除对您的服务进行此类设置的要求。

您必须注册消息请求和响应,并且它是相应的处理程序 您可以使用此框架来封装所需的所有服务行为,并获得清晰的处理逻辑分离。

实现干净的wcf服务的一个很好的框架。而不是调用yourService.Methods,您实际上将发送您的请求并收到您的回复。