WebAPI中的DependencyResolver.SetResolver和HttpConfiguration.DependencyResolver之间有什么区别

我有现有的项目,它使用AutoFac作为IoC。

在注册码我有这些行:

var resolver = builder.Build(); DependencyResolver.SetResolver(new AutofacDependencyResolver(resolver)); config.DependencyResolver = new AutofacWebApiDependencyResolver(resolver); 

所以我的问题是什么DependencyResolver.SetResolverHttpConfiguration.DependecyResolver之间的区别? 我为什么要分配他们?

防止在同一个项目中混合使用MVC和Web API。 微软似乎build议这样做,因为用于Web API的Visual Studio模板将自动将项目与MVC混合,但这是一个坏主意。

从架构的angular度来看,MVC和Web API是完全不同的。 MVC是旨在优化最终用户体验的UI技术。 Web API是一种Web服务技术,旨在优化(客户)开发人员的体验。

MVC和Web API不共享任何演示文稿特定的代码。 在同一个项目中混合使用,只会使项目变得更大,更复杂。

但是更重要的是,这两种应用types都有自己的DIconfiguration需求。 他们有自己的成分根,并将其混合成一个DIconfiguration(一个DI容器)可以使您的configuration非常困难。

最后,在同一个项目中混合使用MVC的Web API会导致命名冲突,这是因为Web API程序集包含许多与MVC对象相同的名称(但实现方式略有不同)。

我想你混淆了MVC和Web API:

 DependencyResolver.SetResolver 

是为MVC和属于大会System.Web.Mvc 。 除此以外:

 Configuration.DependencyResolver 

对于Web APi,它属于程序集System.Web.Http

所以,在你的项目中,它同时使用MVC和Web Api,这就是为什么你看到两行来configurationIoC的原因

DependencyResolver.SetResolver是一个MVC构造,需要使用MVC来支持IOC。

GlobalConfiguration.Configuration.DependencyResolver是WebApi特有的。

如果你想在同一个项目中同时支持MVC和WebApi,你将只需要两者。

这也可能是值得指出的是,你通常不需要明确地设置DependencyResolver.SetResolver作为Ninject Mvc3有一个bootstrap这…看到这里