So implementieren Sie DI in WebAPI mit NInject

Die Abhängigkeitsinjektion ist ein Software-Entwurfsmuster, mit dem Sie steckbare Implementierungen in Ihrer Anwendung mithilfe lose gekoppelter, testbarer Komponenten erstellen können. Es beseitigt die fest codierten Abhängigkeiten zwischen den Typen und erleichtert das Erstellen, Testen und Verwalten Ihrer Typen im Laufe der Zeit. Das IOC-Entwurfsmuster (Inversion of Control) besagt, dass Objekte keine Objekte erstellen sollten, von denen sie abhängen, um bestimmte Aktivitäten auszuführen.

Sie verfügen über viele IOC-Container, die Sie bei der automatischen Instanziierung und Lebenszyklusverwaltung der Objekte unterstützen. Beachten Sie, dass die Abhängigkeitsinjektion eine Teilmenge des IOC-Prinzips ist. Die IOC-Container nutzen die Abhängigkeitsinjektion, um den Kontrollfluss umzukehren.

Anfangen

Erstellen Sie zunächst ein neues WebAPI-Projekt in Visual Studio, um mit dieser Implementierung zu beginnen. Installieren Sie als Nächstes die erforderlichen Pakete von NuGet, um mit NInject zu arbeiten. Sie können das Ninject.Web.WebApi.WebHost-Paket über den NuGet Package Manager installieren. Dies würde wiederum die folgenden zwei Pakete für Sie installieren.

Ninject.Web.WebApi

Ninject.Web.WebApi.WebHost

Abhängigkeitsinjektion mit NInject

Sobald das Ninject.Web.WebApi.WebHost-Paket erfolgreich installiert wurde, wird die Datei NInject.WebCommon.cs automatisch im Ordner App_Start in Ihrem Projekt erstellt. Es würde viel Boilerplate-Code generiert werden - ignorieren Sie ihn einfach und verweisen Sie auf die RegisterServices () -Methode. So würde diese Methode auf den ersten Blick aussehen.

private static void RegisterServices(IKernel kernel)

{

}

Sie müssten Ihren Code in die RegisterServices-Methode schreiben, um die Dienste zu registrieren oder die Abhängigkeiten einzufügen. Wir werden später in diesem Artikel darauf zurückkommen.

In diesem Beispiel verwenden wir die Konstruktorinjektion - eine Art der Abhängigkeitsinjektion, bei der eine oder mehrere Abhängigkeiten über Konstruktoren injiziert werden. Die anderen beiden Arten der Abhängigkeitsinjektion umfassen: Setterinjektion und Schnittstelleninjektion. Ich habe dies in einem meiner früheren Beiträge ausführlich behandelt.

Erstellen Sie als nächsten Schritt einen neuen Controller mit dem Namen AuthorsController für das von Ihnen erstellte WebAPI-Projekt. Ersetzen Sie den Standardcode des AuthorsController durch den unten angegebenen.

public class AuthorsController : ApiController

    {

        private readonly IAuthorRepository repository;

        public AuthorsController(IAuthorRepository repository)

        {

            this.repository = repository;

        }

        public List Get()

        {

            return repository.GetAllAuthors();

        }

    }

Der AuthorsController enthält einen schreibgeschützten Verweis auf die IAuthorRepository-Schnittstelle, einen Argumentkonstruktor und eine Get-Aktionsmethode. Beachten Sie, dass der AuthorsController einen Konstruktor verwendet, um die Abhängigkeit einzufügen, dh es ist ein Argumentkonstruktor, der einen Verweis auf die IAuthorRepository-Schnittstelle als Parameter akzeptiert. Die IAuthorRepository-Schnittstelle wird von der AuthorRepository-Klasse implementiert. So sieht die IAuthorRepository-Oberfläche aus.

public interface IAuthorRepository

    {

        List GetAllAuthors();

    }

Die GetAllAuthors () -Methode wird verwendet, um eine Liste von Autoren zurückzugeben. Die Autorennamen sind fest codiert. Die AuthorRepository-Klasse implementiert die GetAllAuthors-Methode wie unten gezeigt.

public class AuthorRepository : IAuthorRepository

    {

        public List GetAllAuthors()

        {

            List authors = new List();

            authors.Add("Joydip");

            authors.Add("Pete");

            authors.Add("Steve");

            return authors;

        }

    }

Registrierung unserer Dienste bei Ninject

Dieser Schritt ist ganz einfach. Denken Sie daran, dass wir die RegisterServices-Methode bereits früher besprochen haben. Dies gehört zur statischen Klasse NinjectWebCommon in der Datei NinjectWebCommon.cs. So können Sie die RegisterServices-Methode verwenden, um die Abhängigkeiten aufzulösen.

private static void RegisterServices(IKernel kernel)

{

   kernel.Bind().To();   

Und das ist alles was Sie tun müssen. Wenn Sie Laufzeitfehler sehen, die sich auf NInject beziehen, kann dies an ActivationException liegen. Um dies zu beheben, sollten Sie die neueste Version des Ninject.Web.WebApi-Pakets installieren. Aktualisieren Sie einfach das Ninject.Web.WebApi erneut, kompilieren Sie es neu und führen Sie Ihre Anwendung erneut aus.

In diesem Beitrag finden Sie weitere Informationen zur Verwendung von NInject mit WebAPI.