Asp.net mvc 在ASP.NET MVC3中添加web服务的设计模式
首先-我不是问这个问题,我知道按钮在哪里:-)Asp.net mvc 在ASP.NET MVC3中添加web服务的设计模式,asp.net-mvc,asp.net-mvc-3,web-services,dependency-injection,Asp.net Mvc,Asp.net Mvc 3,Web Services,Dependency Injection,首先-我不是问这个问题,我知道按钮在哪里:-) 我试图找到一个最佳实践的例子,说明如何使用新的DI/公共服务定位器框架,使web服务调用(以及依赖于web服务调用的代码)可测试。我没有使用NInject或类似的东西的经验-这是一种方法吗?处理任何外部依赖性的方法基本相同-将其包装在接口中,使控制器将接口的实例作为构造函数参数。在实现方面,您可以通过多种方式处理问题,我们通常让服务包装器将服务作为依赖项,并让structuremap担心生命周期。对NInject不太熟悉,所以我不确定是否有更好的方
我试图找到一个最佳实践的例子,说明如何使用新的DI/公共服务定位器框架,使web服务调用(以及依赖于web服务调用的代码)可测试。我没有使用NInject或类似的东西的经验-这是一种方法吗?处理任何外部依赖性的方法基本相同-将其包装在接口中,使控制器将接口的实例作为构造函数参数。在实现方面,您可以通过多种方式处理问题,我们通常让服务包装器将服务作为依赖项,并让structuremap担心生命周期。对NInject不太熟悉,所以我不确定是否有更好的方法,但我怀疑他们有类似的功能。处理任何外部依赖性的方法基本相同——将其包装在接口中,使控制器将接口的实例作为构造函数参数。在实现方面,您可以通过多种方式处理问题,我们通常让服务包装器将服务作为依赖项,并让structuremap担心生命周期。对NInject不太熟悉,所以我不确定是否有更好的方法,但我怀疑他们也有类似的能力。我不知道什么是最佳实践,但我认为你可以通过温莎的WCF设施做到这一点(NInject也有类似的功能)。注册您的服务,然后设置您的依赖项解析程序,让MVC的依赖项解析程序进行艰苦的工作,例如构造函数注入:
public HomeController(IService service)
{
// ...
}
注册您的服务:
container = new WindsorContainer().AddFacility<WcfFacility>();
container.Register(Component
.For<IService>()
.On(WcfEndpoint.FromConfiguration("...")))
.LifeStyle.Transient);
然后MVC3的新依赖项解析器应该能够将您的服务代理注入构造函数,例如:
public HomeController(IService service)
{
// ...
}
我不知道什么是最好的做法,但我认为你可以用温莎的WCF设施做到这一点(Ninject也有一个)。注册您的服务,然后设置您的依赖项解析程序,让MVC的依赖项解析程序进行艰苦的工作,例如构造函数注入:
public HomeController(IService service)
{
// ...
}
注册您的服务:
container = new WindsorContainer().AddFacility<WcfFacility>();
container.Register(Component
.For<IService>()
.On(WcfEndpoint.FromConfiguration("...")))
.LifeStyle.Transient);
然后MVC3的新依赖项解析器应该能够将您的服务代理注入构造函数,例如:
public HomeController(IService service)
{
// ...
}