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