用于在ASP.NET MVC3中添加Web服务的设计模式

时间:2011-03-04 16:59:55

标签: asp.net-mvc asp.net-mvc-3 web-services dependency-injection

首先 - 我不是问这个问题How to host a web service in MVC3?我知道按钮在哪里: - )

我正在尝试找到一个如何使用新的DI / Common Service Locator框架的最佳实践示例,以便使Web服务调用(以及依赖于Web服务调用的代码)可测试。我没有使用NInject之类的经验 - 这是要走的路吗?

2 个答案:

答案 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)
{
    // ...
}