2013-04-10 89 views
0

在我的公司,我们的服务实现基本上只是将回调传递给业务层,该业务层进行实际处理。因此,举例来说,如果我们有一个服务合同,看起来像这样:动态生成服务实现

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

有没有一种方法来创建此,还是我只是想成为合理懒得?

+0

我认为服务和业务层听起来像同义词。其中一个是不必要的。 – duffymo 2013-04-10 12:38:03

+0

@duffymo:我一般听说把你的服务契约实现与实际的业务逻辑分开是一件好事。 – zimdanen 2013-04-10 12:51:28

+0

你没有分开任何东西;听起来像通过。我看不到任何事务或其他任何东西来区分您的自动生成的服务层。为什么生成无意义的代码?我有基于接口的服务,但我给他们一些有意义的事情。我让他们成为工作单位的所有者和编排者。 – duffymo 2013-04-10 12:52:33

回答

0

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

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

一个伟大的框架,实现干净的wcf服务。不是调用yourService.Methods,而是实际上调度您的请求并接收您的响应。

+0

现在就读一读吧。 – zimdanen 2013-04-10 12:51:52

相关问题