C# 这是使用构造函数链接的好方法还是坏方法?(…允许进行测试)

C# 这是使用构造函数链接的好方法还是坏方法?(…允许进行测试),c#,unit-testing,constructor-chaining,C#,Unit Testing,Constructor Chaining,我在这里链接我的类构造函数的动机是,我有一个默认构造函数供我的应用程序主流使用,第二个构造函数允许我注入一个mock和一个stub 在:this(…)“调用和反直觉地从默认构造函数调用参数化构造函数中,似乎有点丑陋的“新”东西,我想知道其他人会在这里做什么 (供参考->) 我就是这么做的 class MyUnitTestableClass { public MyUnitTestableClass(IMockable foo) { // do stuff }

我在这里链接我的类构造函数的动机是,我有一个默认构造函数供我的应用程序主流使用,第二个构造函数允许我注入一个mock和一个stub

在:this(…)“调用和反直觉地从默认构造函数调用参数化构造函数中,似乎有点丑陋的“新”东西,我想知道其他人会在这里做什么

(供参考->)


我就是这么做的

class MyUnitTestableClass
{
    public MyUnitTestableClass(IMockable foo)
    {
        // do stuff
    }

    public MyUnitTestableClass()
        : this(new DefaultImplementation())
    {
    }
}

包含默认构造函数是一种代码味道,因为现在该类与IDirectoryInfoWrap的具体实现相耦合。为了让您的生活更轻松,请使用类外部的IOC容器来注入不同的依赖项,具体取决于您是运行测试代码还是主流应用程序。

关于这方面的讨论相当多。例如,请参见。一般的共识似乎是,添加默认构造函数可能会造成不必要的混乱,尽管有些人认为,当您的库被不使用依赖项注入框架的调用方使用时,这样做是值得的。感谢链接。在我的例子中,我编写的是一个独立的应用程序,而不是一个库。依赖注入框架是我现在的学习阶梯上的另一个阶梯,但我应该对此进行调查。已添加到我的阅读列表中,谢谢。
class MyUnitTestableClass
{
    public MyUnitTestableClass(IMockable foo)
    {
        // do stuff
    }

    public MyUnitTestableClass()
        : this(new DefaultImplementation())
    {
    }
}