虽然有很多关于堆栈溢出的问题,这与我的这个问题很相似,但是没有人解决我的问题
我正在使用一个MVC4互联网应用程序,其中我有很少的MVC控制器和依赖注入我正在使用Structure map
。尽管依赖注入在MVC控制器中运行良好,但是当我在同一个MVC互联网应用程序中添加WebApi控制器并在WebApi控制器的构造函数中使用与我在MVC控制器中使用的相同的参数但是依赖注入不能与WebApi控制器一起使用时,尽管如果我不为WebApi控制器(无参数构造函数)使用依赖注入,那么它工作正常,但对于WebApi依赖注入(参数化构造函数),它会抛出错误No parameter less constructor is found
。
结论没有为Internet(MVC应用程序)中的WebApi Controller注入依赖关系。
很少有文章建议使用DependencyResolver.SetResolver()
。我用过但没有解决问题。
答案 0 :(得分:2)
WebApi控制器无法正常工作的原因如下:
由于MVC Controller使用不同的DependenyResolver实例,该实例是System.Web.MVC .dll的一部分,并且在System.Web.MVC命名空间内
<强> http://msdn.microsoft.com/en-us/library/system.web.mvc.idependencyresolver(v=vs.98).aspx 强>
Api控制器使用属于System.Web.Http的DependencyResolver实例。
答案 1 :(得分:1)
MVC和WebAPI控制器有不同的设置依赖项解析器的方法。这就是我为Unity设置依赖项解析器的方法:
public void ConfigureForMvc4()
{
DependencyResolver.SetResolver(
new UnityMvc4.UnityDependencyResolver(Container));
}
public void ConfigureForWebApi()
{
GlobalConfiguration.Configuration.DependencyResolver =
new UnityWebApi.UnityDependencyResolver(Container);
}
答案 2 :(得分:0)
您需要为WebApi
添加依赖注入文件安装NuGet StructureMap.WebApi2并在App_Start / WebApiConfig.cs文件中,调用StructuremapWebApi.Start();
参考:https://www.exceptionnotfound.net/setting-up-dependency-injection-in-web-api-with-structuremap/