0

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

问题是我正在使用一个[ServiceContract]在非 WCF 项目中标记为的接口。

有没有办法只在 WCF 上下文中拥有 this 属性而不复制代码?

4

2 回答 2

0

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

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

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

于 2012-05-13T11:40:35.363 回答
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 不会渗入您的其余代码

于 2012-05-13T12:02:49.063 回答