在将一个webapp从IIS / asp.net移植到HttpListener时,有些东西让我觉得很奇怪。
虽然两者都有上下文,请求和响应的概念,但HttpListener变体与IIS / asp.net变体没有共同的接口,尽管接口几乎完全相同。
为了解决这个问题,我创建了自己的通用接口(IContext,IRequest和IResponse),并使用这些接口的实现包装相应的服务器生成的对象,这样我就不需要处理器的两个单独的实现了我正在移植的代码。
这导致了一个包装类爆炸(总共10个),只是围绕这个缺失的通用接口进行编码。
我是否错过了一个技巧,或者这只是.net API的缺点?
答案 0 :(得分:4)
我会说整个HttpContext都有这个缺点。这与添加单元测试时发生的情况相同,你可以将它们包装起来,以便能够在单元测试中用模拟替换。
答案 1 :(得分:4)
在编写需要兼容IIS(IHttpAsyncHandler
)和独立(HttpListener
)的处理程序时,我遇到了相同的.NET设计限制。我采用了为两者编写通用包装器的相同方法。它似乎确实是.NET API的缺点。