Ist es als schlechte Praxis zu betrachten, optionale Parameter zu verwenden, wenn Dependency-Injection-Frameworks mit Constructor-Injection verwendet werden?
Beispiel:
public class ProductsController
{
public ProductsController(IProductService productService = null, IBackOrderService = null)
{
}
}
Ich habe beide Parameter als optional angegeben, aber mein DI-Framework wird immer beide Abhängigkeiten einfügen. Wenn ich eine neue Aktion zu meinem Controller hinzufüge, die eine neue Abhängigkeit erfordert, wäre es schlecht, diese neue Abhängigkeit optional zu machen? Ich könnte potenziell Dutzende von Unittests beeinträchtigen, obwohl die bestehenden Tests die neue Abhängigkeit nicht benötigen würden.
Bearbeiten
Die Leute scheinen von meiner Frage verwirrt zu sein. Ich erstelle nie manuell einen ProductsController in meiner Webanwendung. Dies wird von einer Controller-Fabrik behandelt (die Abhängigkeiten automatisch einfügt).
Was mir nicht gefällt, ist ein Unittest wie dieser:
[Test]
public void Test1()
{
var controller = new ProductsController(new MockProductService(), new MockBackOrderService());
}
Jetzt entscheide ich mich, eine neue Aktionsmethode zu meinem Controller hinzuzufügen. Diese neue Aktion benötigt eine neue Abhängigkeit, aber keine der vorhandenen Aktionen. Jetzt muss ich zurückgehen und 100 verschiedene Unittests ändern, weil ich einen neuen Parameter hinzugefügt habe. Ich kann das vermeiden, indem ich die Parameter optional mache, aber ich wollte wissen, ob das eine schlechte Idee war. Mein Bauchgefühl sagt nein, weil es nur die Unittests betrifft.