在Spring4D中解决问题的最佳实践



在spring4d演示中,ServiceLocator.GetService<MyType>('Name')用于解析类型。但是为什么不使用GlobalContainer.Resolve<MyType>('Name')呢?我认为这种方法没有任何优势。。。

有一个用例,我使用ServiceLocator:当编码以使遗留代码项目单元可测试时。。。

有一个旧项目,在多个地方,有一个对象的构造函数调用,我为它编写测试(仅在类中,新的和更改的方法,在类中不可能注入,例如在按钮事件中创建和销毁Form时)。

在单元测试中,spring4d有助于实例化被测类:

我可以在生产项目的dpr中使用GlobalContainer,以及在Testfixture.Setup中构造并在Testfixture中销毁的特殊(仅限测试)TContainer对象。TearDown…我还重新初始化全局服务定位器以使用我的测试容器(原因:我在测试中使用GlobalContainer的经验不好,您无法在Testfixture.TearDown中从GlobalContainer取消注册类型)。

现在,我在dpr中得到了一个大方法,在生产代码项目中将所有类型注册到GlobalContainer中。在我的测试夹具类的设置方法中,我将测试所需的所有类型注册到我的测试容器中。在方法中,我对其进行了更改,使其可进行单元测试,我使用ServiceLocator构建了测试中的类,以前的构造函数在使用的地方调用这些类。

对我来说,这是使这样一个遗留代码项目单元可测试的唯一方法。。。但我的战略目标是有朝一日替换大部分代码(部分替换,包括重新初始化的ServiceLocators)。现在不可能更换它(成本太高,风险太大…)。

最新更新