我有一些接口被标记为[ServiceContract]
为WCF服务。 但它也用于我的代码中两个不同的非WCF位置。添加的ServiceContract接口
的问题是,我使用的是被标记为不WCF项目[ServiceContract]
一个接口。
有没有办法有一个该属性只在WCF的语境,不重复的代码?
我有一些接口被标记为[ServiceContract]
为WCF服务。 但它也用于我的代码中两个不同的非WCF位置。添加的ServiceContract接口
的问题是,我使用的是被标记为不WCF项目[ServiceContract]
一个接口。
有没有办法有一个该属性只在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的不流血的代码的其余部分
你可以使用条件编译指令:
#if WCF
[ServiceContract]
#endif
public interface ...
然后只定义在WCF项目的WCF令牌。
请你举一个例子,我如何添加适配器像这样的可以加一个属性 –
增加了一些更详细 –