dex*_*ter 12 .net polymorphism wcf c#-4.0
与asmx实现不同,wcf需要您实现它的接口.我不太明白这种设计背后的原因.接口是两个类之间的契约......说到这一点,你有多少次有2个wcf服务满足相同的接口但实现方式不同?
另一条评论,msdn强烈建议这样做:
MyService service = new MyService();
try {
service.DoWork();
}
catch(Exception) {}
finally {
service.Close();
}
Run Code Online (Sandbox Code Playgroud)
所以,假设我要使用它的界面注入我的服务,如下所示:
public MyComponent : IDisposable
{
readonly IMyService service = null;
public MyComponent(IMyService service) {
this.service = service;
}
public DoWork()
{
//some additional code.
this.service.DoWork();
}
public void Dispose()
{
//The Interface does not have the Close method,
//So doing this defeats the whole purpose of polymorphysm
(this.service as MyService).Close(); //Silly.
}
}
Run Code Online (Sandbox Code Playgroud)
你如何利用WCF的界面?
mar*_*c_s 24
不,WCF 不要求您拥有接口并实现它.
这只是普遍接受的最佳实践这么做-但你不会有,如果你不想.
如果你愿意,你可以把你带到[ServiceContract]一个具有多种[OperationContract]服务方法的具体课程- 没有什么能阻止你这样做.
但同样:它通常被接受并传播最佳实践,使用接口将实际合同分离为接口(因此您可以例如模拟它进行测试等).
实际上,甚至MSDN也不时承认接口的形式并不总是"正确的做法":
http://msdn.microsoft.com/en-us/library/ms733070.aspx
"通过将ServiceContractAttribute和OperationContractAttribute分别直接应用于类和类的方法来创建服务的优点是速度和简单性."
您可以在不使用接口的情况下创建WCF服务:
[ServiceContract]
public class TheService
{
// more stuff here
}
Run Code Online (Sandbox Code Playgroud)
也就是说,建议将它们分开.将合同与实施分开可以给您一些不同的优势:
还有其他原因,但立即浮现在脑海中.