NInject is a popular IOC container that can be used to inject dependencies in your WebAPI controllers easily Credit: IDG Dependency injection is a software design pattern that helps you to build pluggable implementations in your application using loosely coupled, testable components. It eliminates the hard-coded dependencies between the types and makes your types easier to build, test, and maintain over time. The IOC (Inversion of Control) design pattern states that objects should not create objects on which they depend in order to perform some activity. You have many IOC containers that help you in automatic instantiation and life cycle management of the objects. Note that Dependency injection is a subset of the IOC principle. The IOC containers leverage dependency injection to invert the flow of control. Getting started To get started with this implementation create a new WebAPI project in Visual Studio. Next, install the necessary packages from NuGet to work with NInject. You can install the Ninject.Web.WebApi.WebHost package via the NuGet Package Manager. This would in turn install the following two packages for you. Ninject.Web.WebApi Ninject.Web.WebApi.WebHost Dependency injection using NInject Once the Ninject.Web.WebApi.WebHost package is successfully installed, the NInject.WebCommon.cs file is automatically created inside the App_Start folder in your project. There would be a lot of boilerplate code generated – just ignore it and refer to the RegisterServices() method. At first glance, here’s how this method would look like. private static void RegisterServices(IKernel kernel) { } You would need to write your code in the RegisterServices method to register the services or inject the dependencies. We will come back to this later in this article. In this example, we will be using constructor injection – a type of dependency injection in which one or more dependencies are injected through constructors. The other two types of dependency injection include: setter injection and interface injection. I covered this in detail in one of my earlier posts. As a next step, create a new controller named AuthorsController to the WebAPI project you have created. Replace the default code of the AuthorsController with the one given below. public class AuthorsController : ApiController { private readonly IAuthorRepository repository; public AuthorsController(IAuthorRepository repository) { this.repository = repository; } public List<string> Get() { return repository.GetAllAuthors(); } } The AuthorsController contains a readonly reference to the IAuthorRepository interface, an argument constructor and a Get action method. Note that the AuthorsController uses a constructor to inject the dependency, i.e., it is an argument constructor that accepts a reference to the IAuthorRepository interface as a parameter. The IAuthorRepository interface is implemented by the AuthorRepository class. Here’s how the IAuthorRepository interface looks like. public interface IAuthorRepository { List<string> GetAllAuthors(); } The GetAllAuthors() method is used to return a list of authors. The author names are hard-coded. The AuthorRepository class implements the GetAllAuthors method as shown below. public class AuthorRepository : IAuthorRepository { public List<string> GetAllAuthors() { List<string> authors = new List<string>(); authors.Add("Joydip"); authors.Add("Pete"); authors.Add("Steve"); return authors; } } Registering our services with Ninject This step is quite simple. Remember we discussed the RegisterServices method earlier? This belongs to the static class NinjectWebCommon in the NinjectWebCommon.cs file. Here’s how you can use the RegisterServices method to resolve the dependencies. private static void RegisterServices(IKernel kernel) { kernel.Bind<IAuthorRepository>().To<AuthorRepository>(); } And that’s all you need to do. If you see any runtime errors that are related to NInject, that may be due to ActivationException. To fix it, you should install the latest version of Ninject.Web.WebApi package. Just upgrade the Ninject.Web.WebApi again, recompile and then execute your application again. You can take a look at this post for additional information on how we can use NInject with WebAPI. Related content feature 14 great preprocessors for developers who love to code Sometimes it seems like the rules of programming are designed to make coding a chore. Here are 14 ways preprocessors can help make software development fun again. By Peter Wayner Nov 18, 2024 10 mins Development Tools Software Development feature Designing the APIs that accidentally power businesses Well-designed APIs, even those often-neglected internal APIs, make developers more productive and businesses more agile. By Jean Yang Nov 18, 2024 6 mins APIs Software Development news Spin 3.0 supports polyglot development using Wasm components Fermyon’s open source framework for building server-side WebAssembly apps allows developers to compose apps from components created with different languages. By Paul Krill Nov 18, 2024 2 mins Microservices Serverless Computing Development Libraries and Frameworks news Go language evolving for future hardware, AI workloads The Go team is working to adapt Go to large multicore systems, the latest hardware instructions, and the needs of developers of large-scale AI systems. By Paul Krill Nov 15, 2024 3 mins Google Go Generative AI Programming Languages Resources Videos