是否有比Singleton模式更好的选择来暴露我的课程'依赖性,如果我没有使用IoC容器?

时间:2014-05-07 13:34:27

标签: c# .net unit-testing singleton inversion-of-control

我正在构建一个由其他应用程序使用的类库。我没有IoC容器,因为我不希望它强加给我的库的消费者。

消费者应该能够在他们的引导程序中配置库,如下例所示:

Example.Configure({ x => 
    {
        x.AddSomeSetting();
        x.AddAnotherSetting();
    });

以后对库的任何使用都应使用此中央配置:

// exampleObject should use the central configuration defined above
var exampleObject = new Example.SomeClass();

我使用了一个单例类来存储配置,以后将由库的其余部分访问。

单元测试时出现问题。一旦单元测试方法修改单例配置,所有其他单元测试都会受到此修改的影响。

我可以在每个测试开始时调用的单例上有一个Reset()方法,但它纯粹用于测试。

有没有比将这个全局状态存储为单例更好的解决方案?

1 个答案:

答案 0 :(得分:2)

简单:在其构造函数中为每个库组件提供配置实例。这可能比你想要的更冗长,但它符合你的设计目标,它为图书馆用户提供了完全的自由(甚至可能自己使用依赖注入库)。