首先 - 我不是问这个问题How to host a web service in MVC3?我知道按钮在哪里: - )
我正在尝试找到一个如何使用新的DI / Common Service Locator框架的最佳实践示例,以便使Web服务调用(以及依赖于Web服务调用的代码)可测试。我没有使用NInject之类的经验 - 这是要走的路吗?
答案 0 :(得分:4)
几乎与处理任何外部依赖性的方式相同 - 将其包装在接口中,使控制器将接口的实例作为构造函数参数。在实现方面,您可以通过多种方式处理事务,我们通常使服务包装器将服务作为依赖项,让structmap担心生命周期。对NInject不太熟悉,所以我不确定是否有更好的方法,但我怀疑他们有类似的能力。
答案 1 :(得分:1)
我不知道什么是最佳做法,但我认为你可以使用Windsor的WCF工具(Ninject也有WCF extension)。注册你的服务,然后设置你的依赖项解析器,让MVC的依赖解析器做艰苦的工作,例如构造函数注入:
注册您的服务:
container = new WindsorContainer().AddFacility<WcfFacility>();
container.Register(Component
.For<IService>()
.On(WcfEndpoint.FromConfiguration("...")))
.LifeStyle.Transient);
设置依赖项解析器:
DependencyResolver.SetResolver(new WindsorDependencyResolver(container));
然后MVC3的新依赖项解析器应该能够将您的服务代理注入构造函数,例如:
public HomeController(IService service)
{
// ...
}