在不使用第三方依赖项解析程序的情况下设置默认依赖项

时间:2011-07-07 00:25:51

标签: asp.net-mvc-3 c#-4.0 dependency-injection

在外部库中,我有一个需要两个存储库依赖项的控制器。默认构造函数通过调用简单工厂来创建依赖项来解决这些依赖项。我想让我的库的订阅者能够覆盖任何依赖项,但是当它们没有被覆盖时使用默认的依赖项。

举个例子:

public class LibraryController {
    public LibraryController(IRepository1 repo1, IRepository2 repo2) {
    }
}

他们可能会覆盖IRepository1但不会覆盖IRepository2。我对Dependency Injection的理解不够,或者我在这里遗漏了一些东西。

我不想强制依赖NinjectStructureMapUnity来创建默认依赖项。没有它我怎么能这样做?

编辑:我可以根据不同的参数创建几个构造函数,但我希望有一个不同的解决方案。

1 个答案:

答案 0 :(得分:3)

DI中的默认方法恰恰是创建所有适当的重载。这很容易做到,不需要额外的库或框架。在你的情况下,只有四种可能的组合,所以这不是太糟糕。

您可能会认为随着构造函数参数的数量增加而变得笨拙,但首先是shouldn't have too many dependencies

作为一般规则,使用构造函数注入时,最好只公开 注入构造函数并删除默认值。结合DI和默认构造函数是一种设计气味,我称之为 Bastard Injection 。这很少是正确的方法。