Dependency Injection lösen und unit-Tests

Ich versuche zu lernen, dependency injection und haben auf ein problem stoßen, wenn die unit-Tests der Anwendung.

Ich Schreibe eine Konsolenanwendung, und der container wird erstellt und initialisiert, die in Main(), es ist verfügbar als get-property im Program.Container, so dass überall in meiner Anwendung, die ich anrufen kann Program.Container.Resolve<..>().

Ich habe eine ServiceValidator Klasse wie folgt aus:

public class ServiceValidator
{
    private readonly IConfiguration _configuration;
    private readonly IService _service;

    public ServiceValidator(IConfiguration configuration, IService service)
    {
        _configuration = configuration;
        _service = service;
    }

In einer anderen Klasse benutze ich

ServiceValidator serviceValidator = Program.Container.Resolve<ServiceValidator>();
serviceValidator.VerifyVersion();

Es ist der Aufruf zu Program.Container.Resolve dass verursacht mir Probleme in der unit-test, wie es bisher nicht einrichten.

Ist das eine schlechte Praxis, um den Anruf zu lösen, die auf den container? Ich könnte die ServiceValidator Instanz in Main() und übergeben Sie das Objekt um, aber das scheint dumm, wie es würde zu viele Parameter für die Objekte, die sich gerade übergeben, um Sie mit der nächsten Methode.

Also ich denke, es ist akzeptabel, rufen Beheben, die innerhalb einer Klasse, aber dann muss der Behälter so konfiguriert werden, dass der unit-test. Wie soll ich das machen, sollte ich den container verschieben an einen anderen Ort als das Programm Klasse? Was würden Sie empfehlen?

Wenn es darauf ankommt, bin ich mit Unity und C#

Dank 🙂

InformationsquelleAutor Karsten | 2009-05-04
Schreibe einen Kommentar