在使用带有构造函数注入的依赖注入框架时使用可选参数是否被认为是一种不好的做法?
例子:
public class ProductsController
{
public ProductsController(IProductService productService = null, IBackOrderService = null)
{
}
}
我已将这两个参数都指定为可选参数,但我的 DI 框架将始终注入这两个依赖项。如果我向我的控制器添加一个需要新依赖项的新操作,那么将新依赖项设为可选是否会很糟糕?即使现有的测试不需要新的依赖项,我也可能会破坏数十个单元测试。
编辑
人们似乎对我的问题感到困惑。我从不在我的 Web 应用程序中手动构建 ProductsController。这由控制器工厂(自动注入依赖项)处理。
我不喜欢这样的单元测试:
[Test]
public void Test1()
{
var controller = new ProductsController(new MockProductService(), new MockBackOrderService());
}
现在我决定向我的控制器添加一个新的操作方法。此新操作需要新的依赖项,但现有操作都不需要。现在我必须回去修改 100 个不同的单元测试,因为我添加了一个新参数。我可以通过使参数可选来避免这种情况,但我想知道这是否是一个坏主意。我的直觉说不,因为它唯一影响的是单元测试。