使用Web Api和structuremap依赖注入

时间:2013-03-19 10:49:37

标签: asp.net-mvc-4 asp.net-web-api structuremap

虽然有很多关于堆栈溢出的问题,这与我的这个问题很相似,但是没有人解决我的问题

我正在使用一个MVC4互联网应用程序,其中我有很少的MVC控制器和依赖注入我正在使用Structure map。尽管依赖注入在MVC控制器中运行良好,但是当我在同一个MVC互联网应用程序中添加WebApi控制器并在WebApi控制器的构造函数中使用与我在MVC控制器中使用的相同的参数但是依赖注入不能与WebApi控制器一起使用时,尽管如果我不为WebApi控制器(无参数构造函数)使用依赖注入,那么它工作正常,但对于WebApi依赖注入(参数化构造函数),它会抛出错误No parameter less constructor is found

结论没有为Internet(MVC应用程序)中的WebApi Controller注入依赖关系。

很少有文章建议使用DependencyResolver.SetResolver()。我用过但没有解决问题。

3 个答案:

答案 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实例。

<强> http://msdn.microsoft.com/en-us/library/system.web.http.dependencies.idependencyresolver(v=vs.108).aspx

答案 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/

相关问题