WebAPI中的DependencyResolver.SetResolver和HttpConfiguration.DependencyResolver之间有什么区别
我有现有的项目,它使用AutoFac作为IoC。
在注册码我有这些行:
var resolver = builder.Build(); DependencyResolver.SetResolver(new AutofacDependencyResolver(resolver)); config.DependencyResolver = new AutofacWebApiDependencyResolver(resolver);
所以我的问题是什么DependencyResolver.SetResolver
和HttpConfiguration.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这…看到这里