12

Kann jemand an eine gute Lösung denken, um IOC in eine Konsolenanwendung zu bekommen?IOC für eine Konsolenanwendung?

Im Moment verwenden wir nur eine statische Klasse mit folgenden Methode:

public static T Resolve<T>() 
{ 
    return dependencyResolver.Resolve<T>(); 
} 

ich die Erfahrung möchte nahtlos sein, aber von einer Konsole Anwendung einer Art und Weise denkt, dies zu erreichen, kann es nicht.

Antwort

7

Sie müssen irgendwo einen Service-Locator-Anruf tätigen (Resolve<T>()). Der Trick ist, es so weit wie möglich wegzubekommen. Bei Konsolenanwendungen erfolgt dieses Bootstrapping in der Main()-Methode. Tun Sie es dort und minimieren Sie diese Anrufe anderswo und Sie werden großartig sein. Verwenden Sie für die meisten Abhängigkeiten die Konstruktorinjektion.

+0

Rufen Sie die Resolve () -Methode direkt aus dem IoC-Container auf oder verwenden Sie einen Wrapper, um den IoC-Container aus der Konsolenanwendung auszublenden? – Rookian

+0

rufen Sie es direkt aus dem Container .. es sei denn, Sie haben einen Grund, es zu verbergen. –

+1

@MattHinze Wird dies auch in einer Konsolen-App immer noch als Anti-Pattern betrachtet? – Rushino

1

Ich habe Spring.NET von einer Konsolenanwendung ohne Probleme verwendet. Sie müssen nur auf Ihre Konfigurationsdatei zeigen, und es wird alle Abhängigkeiten verbinden. Was Sie dann mit diesen Objekten tun hängt davon ab, was Ihre Konsolenanwendung versucht, natürlich zu tun.

1

Zur Kasse gehen Microsoft Unity.

3

Konsolenanwendungen haben keine Einschränkungen in Bezug auf eine Web- oder Formularanwendung für IoC. Sie können eine beliebige Ihrer Wahl verwenden (Spring, Ninject, Unity usw.). Die meisten von ihnen sind mit XML-Dateien außerhalb Ihrer Konsolenanwendung konfigurierbar und einige wie Ninjector erfordern eine Konfiguration in Ihrer Anwendung.

+0

Für vergessen Unity –