栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

创建单例访问统一容器或将其传递给应用程序更好吗?[关闭]

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

创建单例访问统一容器或将其传递给应用程序更好吗?[关闭]

DI的正确方法是使用 构造函数注入 或其他DI模式(但最常见的是Constructor Injection)将依赖项注入到使用者中, 而与DI
Container无关

在您的示例中,看起来您需要依赖项

TestSuite
TestCase
,因此您的TestSuiteParser类应通过(仅)构造函数要求它们来
静态声明 它需要这些依赖项:

public class TestSuiteParser{    private readonly TestSuite testSuite;    private readonly TestCase testCase;    public TestSuiteParser(TestSuite testSuite, TestCase testCase)    {        if(testSuite == null)        { throw new ArgumentNullException(testSuite);        }        if(testCase == null)        { throw new ArgumentNullException(testCase);        }        this.testSuite = testSuite;        this.testCase = testCase;    }    // ...}

通知如何组合

readonly
关键字和保护条款保护类的不变量,确保依赖 提供给TestSuiteParser的任何成功创建实例。

您现在可以像这样实现Parse方法:

public TestSuite Parse(XPathNavigator someXml) {     List<XPathNavigator> aListOfNodes = DoSomeThingToGetNodes(someXml)    foreach (XPathNavigator blah in aListOfNodes)     {         this.testSuite.TestCase.Add(this.testCase);     }  }

(但是,我怀疑可能涉及多个TestCase,在这种情况下,您可能想注入一个Abstract
Factory
而不是一个TestCase。)

在您的Composition Root中,您可以配置Unity(或任何其他容器):

container.RegisterType<TestSuite, ConcreteTestSuite>();container.RegisterType<TestCase, ConcreteTestCase>();container.RegisterType<TestSuiteParser>();var parser = container.Resolve<TestSuiteParser>();

当容器解析TestSuiteParser时,它将理解构造函数注入模式,因此它将 自动 连接实例及其所有必需的依赖项。

创建Singleton容器或将容器四处传递只是Service
Locator反模式的两个变体,所以我不建议这样做。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/576220.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号