在外部库中,我有一个需要两个存储库依赖项的控制器。默认构造函数通过调用简单工厂来创建依赖项来解决这些依赖项。我想让我的库的订阅者能够覆盖任何依赖项,但是当它们没有被覆盖时使用默认的依赖项。
举个例子:
public class LibraryController {
public LibraryController(IRepository1 repo1, IRepository2 repo2) {
}
}
他们可能会覆盖IRepository1
但不会覆盖IRepository2
。我对Dependency Injection
的理解不够,或者我在这里遗漏了一些东西。
我不想强制依赖Ninject
或StructureMap
或Unity
来创建默认依赖项。没有它我怎么能这样做?
编辑:我可以根据不同的参数创建几个构造函数,但我希望有一个不同的解决方案。
答案 0 :(得分:3)
DI中的默认方法恰恰是创建所有适当的重载。这很容易做到,不需要额外的库或框架。在你的情况下,只有四种可能的组合,所以这不是太糟糕。
您可能会认为随着构造函数参数的数量增加而变得笨拙,但首先是shouldn't have too many dependencies。
作为一般规则,使用构造函数注入时,最好只公开 注入构造函数并删除默认值。结合DI和默认构造函数是一种设计气味,我称之为 Bastard Injection 。这很少是正确的方法。