依赖注入破坏了我的WebApi控制器

时间:2018-09-13 13:57:41

标签: asp.net-web-api model-view-controller dependency-injection

我有一个MVC项目,该项目利用控制器中的DI模式,并使用Unity来解决我的依赖项。

我最近介绍了WebApi软件包,它是在引入了令人讨厌的错误之后。

当我尝试将服务类注入Web api控制器时,出现以下错误:

  

“尝试创建类型为'TestController'的控制器时发生错误。请确保该控制器具有无参数的公共构造函数。”

这是代码

public class TestController : ApiController
{
    private readonly IBrokerService _brokerAccessService;
    public TestController(IBrokerService brokerAccessService)
    {
        _brokerAccessService = brokerAccessService;
    }

    /// Controller methods here

}

我可以像这样添加一个无参数的构造函数,并且效果很好

        public TestController()
    {
        _brokerAccessService = new BrokerService(new BrokerRepository(new ForexRebatesNowEntities()));
    }

但这完全违反了DI模式

我将此服务注入了其他控制器(源自MVC“ BaseController”而不是WebApi“ ApiController”)

MVC控制器和APi控制器处理DI的方式是否有所不同?

1 个答案:

答案 0 :(得分:1)

似乎您的Dependency Resolver没有为WebAPI设置。如果您从使用控制器转移到WebApi控制器,则DependencyResolver是不同的。对于您的常规MVC控制器,您可能一直在进行类似于Name :Student, LastID : 50001 的调用,但是WebApi控制器的DI需要将其依赖项解析器设置为HttpConfiguration,类似于Update Sequence set LastID = Case when LastID + @range >= @max then 0 else LastID end where Name ='StudentID'

例如,在某些项目中,我使用SimpleInjector(想法应该相同)-

MVC DI配置:

DependencyResolver.SetResolver()

WebAPI配置:

httpConfiguration.DependencyResolver =

请注意,这些调用都在同一项目中,在同一项目中我们拥有MVC控制器和WebApi。