【发布时间】:2015-09-21 18:22:01
【问题描述】:
考虑这个类与这两个构造函数:
public class DocumentService
{
private IDocumentDbService documentDbService;
private IDirectoryService directoryService;
private IFileService fileService;
// Constructor
public DocumentService()
{
this.documentDbService = new DocumentDbService();
this.directoryService = new DirectoryInfo();
this.filService = new FileInfo();
}
// Injection Constructor
public DocumentService(IDocumentDbService dbs, IDirectoryService ds, IFileService fs)
{
this.documentDService = dbs;
this.directoryService = ds;
this.fileService = fs;
}
}
我使用第二个构造函数来模拟单元测试的依赖项。
有时候依赖太多,所以注入构造函数的参数太多了。
所以,我想使用Unity 依赖注入。
问题
如何重构此代码以改用Unity?
(在阅读了Unity的文档后,仍然不确定如何在我的代码上正确使用它。)
【问题讨论】:
-
很确定您会为大多数 DI 框架使用完全相同的代码。您通常在运行时通过配置文件从我所见过的 DI 示例中提供依赖项(Ninject、Unity、structuremap 都有自己的配置风格/语法)。
-
你说你想重构这段代码来使用统一。而不是什么?
-
抛弃默认构造函数;拥有multiple constructors is an anti-pattern。
-
我也一直在学习如何使用 Unity Containers,您的问题反映了我一直在寻找的问答类型;我希望有人能够清楚地表达这个问题的答案。
标签: c# unit-testing dependency-injection unity-container