2

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

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

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

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

4

3 回答 3

2

WebApi 控制器不工作的原因如下:

由于 MVC 控制器使用不同的 DependenyResolver 实例,它是 System.Web.MVC .dll 和 System.Web.MVC 命名空间的一部分

http://msdn.microsoft.com/en-us/library/system.web.mvc.idependencyresolver(v=vs.98).aspx

Api Controllers 使用 System.Web.Http 的一部分的 DependencyResolver 实例。

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

于 2013-03-25T09:10:05.700 回答
1

MVC 和 WebAPI 控制器有不同的方式来设置它们的依赖解析器。这就是我为 Unity 设置依赖解析器的方式:

public void ConfigureForMvc4()
{
    DependencyResolver.SetResolver(
        new UnityMvc4.UnityDependencyResolver(Container));
}

public void ConfigureForWebApi()
{
    GlobalConfiguration.Configuration.DependencyResolver =
        new UnityWebApi.UnityDependencyResolver(Container);
}
于 2013-03-19T10:55:48.413 回答
0

您需要为 WebApi 添加依赖注入文件

安装 NuGet StructureMap.WebApi2 并在 App_Start/WebApiConfig.cs 文件中,调用 StructuremapWebApi.Start();

参考:https ://www.exceptionnotfound.net/setting-up-dependency-injection-in-web-api-with-structuremap/

于 2017-12-11T04:08:07.770 回答