2016-08-08 59 views
0

Wir verwenden Autofac, um eine einfache Dependency-Injektion in unserer Web-App durchzuführen. Es ist alles konfiguriert und registriert in Klassen, die hinter den Kulissen arbeiten. Es macht Sachen in unserem Projekt schmerzlos einfach wie diese Injektion:Abhängigkeitsinjektion in eine Konsolen-App

//interface 
public interface ISuperHereService 
{ } 

//class that uses the interface 
public class SuperHeroFactory 
{ 
    public ISuperHeroService SuperHeroService { get; } 

    public SuperHeroFactory(ISuperHeroService superHeroService) 
    { 
     SuperHeroService = superHeroService; 

     ...do all our stuff... 

aber jetzt habe ich ein separates Projekt als Konsolenanwendung erstellen habe. Meine Konsolenanwendung verfügt über eine Main-Methode.

Ich bin überhaupt nicht sicher, wie man eine Schnittstelle in die Hauptmethode einspritzt.

Ist das möglich?

Danke!

+2

Werfen Sie einen Blick auf [Autofac-DI-Container in der Konsolen-App] (http://codereview.stackexchange.com/questions/56197/autofac-di-container-in-console-app) –

+2

hier erklärt http: // stackoverflow com/questions/31903082/injection-in-Konsole-Anwendung mit dem einfachen Injektor –

Antwort

5

Ihren Containers in Main (oder in Methoden von Main genannt.) Erstellen und Konfigurieren dann eine Instanz von SuperHeroFactory aus dem Behälter lösen und was auch immer Methoden, die Sie anrufen zu müssen.

Jemand kann einwenden, dass Sie nichts direkt aus dem Container lösen sollten. Das stimmt, aber Main ist dein Kompositionswurzel. Dort sollten wir den Container referenzieren, also ist es dort angebracht.

2

Nein, tun Sie das nicht in Ihrer Main() Methode; Definieren Sie stattdessen eine separate Klasse, die diese ISuperHeroService Instanz übernehmen und die notwendige Arbeit ausführen soll. Dann erstellen Sie eine Instanz dieser Klasse in Ihrer Main() Methode und zum Zeitpunkt der Instanziierung können Sie die gleiche DI wie Sie jetzt tun.