Enabling Dependency Injection

ASP.NET MVC 3 introduced limited support for dependency injection containers to provide both built-in MVC services and the ability to be the factory for non-service classes like controllers and views. Web API has followed suit with similar functionality, with two critical differences.

First, MVC used several static classes as the container for the default services consumed by MVC. Web API's configuration object replaces the need for these static classes, so the developer can inspect and modify this default service listed by accessing HttpConfiguration.Services.

Second, Web API's dependency resolver has introduced the notion of “scopes.” A scope can be thought of as a way for a dependency injection container to keep track of the objects that it has allocated in some particular context so that they can be easily cleaned up all at once. Web API's dependency resolver uses two scopes:

  • A per-configuration scope—For services global to the configuration, cleaned up when the configuration is disposed
  • A request-local scope—For services created in the context of a given request, such as those consumed by a controller, and cleaned up when the request is completed

Chapter 13 contains more detailed information on using dependency injection in both MVC and Web API scenarios.

Get Professional ASP.NET MVC 4 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.