2012-05-13 25 views
0

我有一些接口被标记为[ServiceContract]为WCF服务。 但它也用于我的代码中两个不同的非WCF位置。添加的ServiceContract接口

的问题是,我使用的是被标记为不WCF项目[ServiceContract]一个接口。

有没有办法有一个该属性只在WCF的语境,不重复的代码?

回答

0

你为什么要使用不属于WCF地方WCF合同的定义?其接口是WCF实现细节的事实。在其他代码中定义与WCF不相关的接口,然后如果需要与WCF对话,则编写一个转发到WCF接口的适配器。

这样做的另一个好处是,你提供的是一种隔离边界更改为WCF合同没有渗到你的其他代码

interface IFoo 
{ 
    void DoSomething(); 
} 

[ServiceContract] 
interface IWCFFoo 
{ 
    [OperationContract] 
    void DoSomething(); 
} 

class FooAdapter : IFoo 
{ 
    IWCFFoo wrapped; 

    public FooAdapter(IWCFFoo wrapped) 
    { 
      this.wrapped = wrapped; 
    } 

    public void DoSomething() 
    { 
      wrapped.DoSomething(); 
    } 
} 

也允许不同类型要在IFoo的使用, IWCFFoo所以DataContract DTO的不流血的代码的其余部分

+0

请你举一个例子,我如何添加适配器像这样的可以加一个属性 –

+0

增加了一些更详细 –

0

你可以使用条件编译指令:

#if WCF 
[ServiceContract] 
#endif 
public interface ... 

然后只定义在WCF项目的WCF令牌。