我有一些标记为[ServiceContract]
用于 WCF 服务的接口。但它也用于我的代码中的两个不同的非 WCF 位置。
问题是我正在使用一个[ServiceContract]
在非 WCF 项目中标记为的接口。
有没有办法只在 WCF 上下文中拥有 this 属性而不复制代码?
您可以使用条件编译指令:
#if WCF
[ServiceContract]
#endif
public interface ...
然后只在您的 WCF 项目中定义 WCF 令牌。
为什么在不是 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 不会渗入您的其余代码