我有一些接口,这是标记为[ServiceContract]的WCF服务。但在我的代码中,它也用在两个不同的非WCF位置。
问题是我使用的接口在非WCF项目中被标记为[ServiceContract]。
有没有一种方法可以只在WCF上下文中拥有this属性而不复制代码?
发布于 2012-05-13 20:02:49
为什么要在非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-13 19:40:35
您可以使用条件编译指令:
#if WCF
[ServiceContract]
#endif
public interface ...然后仅在您的WCF项目中定义WCF令牌。
https://stackoverflow.com/questions/10571377
复制相似问题