Asp.net mvc 使用WCF的ASP.NET MVC
我的ASP.NET MVC 2控制器当前正在通过传递Castle Windsor实例化的存储库实例在其构造函数中实例化服务对象。我有一些单元测试,它们在将存储库的Moq实例传递给控制器的构造函数之后调用控制器操作 我希望允许第三方UI通过WCF访问这些服务对象 我突然想到,将现有服务层转换为Web服务,甚至在UI和现有服务层之间添加一个新的Web服务层,都会破坏我的单元测试,除非我找到弥合这一差距的方法 我试图找到一个解决方案,在这个解决方案中,我的UI是根据服务层的接口编码的(它已经是了),我可以使用DI在运行时通过Web服务实现,并在单元测试期间通过现有实现。Web服务实现将只调用现有的实现 问题:Asp.net mvc 使用WCF的ASP.NET MVC,asp.net-mvc,wcf,unit-testing,dependency-injection,repository,Asp.net Mvc,Wcf,Unit Testing,Dependency Injection,Repository,我的ASP.NET MVC 2控制器当前正在通过传递Castle Windsor实例化的存储库实例在其构造函数中实例化服务对象。我有一些单元测试,它们在将存储库的Moq实例传递给控制器的构造函数之后调用控制器操作 我希望允许第三方UI通过WCF访问这些服务对象 我突然想到,将现有服务层转换为Web服务,甚至在UI和现有服务层之间添加一个新的Web服务层,都会破坏我的单元测试,除非我找到弥合这一差距的方法 我试图找到一个解决方案,在这个解决方案中,我的UI是根据服务层的接口编码的(它已经是了),我
另外,我从Castle切换到Ninject,因为它的成熟度级别较低,我现在不习惯使用它。您能更详细地解释一下为什么您的测试会失败吗 我一直在做这种类型的开发。服务作为类=>服务作为WCF服务
你的测试不应该失败。WCF服务几乎是100%契约,底层业务代码和逻辑不必更改。查看由模式与实践团队创建的。这是一种将您的服务组织为合同项目(数据、消息、服务)和“业务代码”的好方法。一旦你对如何构造你的代码有了更好的理解,你就可以把他们的风格重构成更适合你的风格。他们的例子倾向于将所有东西都分割成许多VS项目,这对大多数商店来说可能有点过分。例如,我没有看到很多商店在项目之间共享数据合同。是的,在一个完美的世界中,您可能应该在项目之间共享很多操作系统类型(比如地址),但我不认为经常这样做。所以,我倾向于将所有合同内容放在一个VS项目中 如果您的服务已经定义为接口,那么您就有了一个良好的开端 将服务作为构造函数依赖项而不是存储库传递到控制器。让您的DI容器A)为服务提供存储库,B)为控制器提供服务 如果希望将服务层作为wcf服务供其他应用程序访问,则需要使用wcf服务工厂从DI容器中提取具体的服务实现,它应该很容易适应您使用的任何容器
此时,您可以修改您的网站,以A)继续直接调用服务,或B)让他们使用服务客户端回调web服务。这两种方法都有优点和缺点。我认为这是不可行的,但我会尝试一下,看看它是如何工作的。你真的托管了WCF服务并对托管的服务运行了单元测试吗?不,我只是对对象实例
new MayosService()
运行了它。它只是单击。。。这只是一个实现接口的类。这里的所有答案都很有帮助——我认为你的答案对我的方法影响最大。谢谢