0

所以我想为我的 ASP.NET Web API 项目设置依赖注入。自版本 3 以来,Microsoft 似乎已经改变了在 MVC 中设置 DI 的方式。现在我需要进行如下调用:

GlobalConfiguration.Configuration.ServiceResolver.SetResolver(DependencyResolver);

SetResolver()接受一个对象。什么类型的对象?

当我运行应用程序时,我收到一条错误消息,告诉我传入的参数SetResolver()必须实现Microsoft.Practices.ServiceLocation.IServiceLocator。当然,我可以这样做。我敢肯定这并不难。

但是我无法创建一个实现的类,IServiceLocator因为我没有定义该死的东西的 dll。大概安装 ASP.NET Web API 时不会包含它。那么我到底应该如何让项目使用我的自定义容器进行 DI 呢?

4

1 回答 1

2

这是它在测试版中的样子,但它会改变(见这里):

DI 基于在 HttpConfiguration 对象上设置依赖关系解析器(技术上是服务定位器)。此对象作为静态属性(Web 托管)位于 GlobalConfiguration 对象上,或者在 HttpSelfHostConfiguration 上自托管的情况下。

因此,在网络托管的情况下,您将使用:

GlobalConfiguration.Configuration.ServiceResolver.SetResolver(myResolver);

注册依赖解析器时基本上有 3 个选项:

  1. IDependencyResolver一个实现依赖的对象的实例,它有两种方法:GetServiceGetServices
  2. 具有以下两个公共方法的对象实例:GetInstanceGetAllInstances. 不需要接口,Web API 将使用反射来调用方法。
  3. 传递两个返回特定类型的一个或多个实例的委托

编辑

IDependencyResolver of Web API (not MVC) is located in System.Web.Http.dll in System.Web.Http.Services namespace.

于 2012-05-02T10:27:07.193 回答