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

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

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

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反模式的两个变体,所以我不建议这样做。



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5567445.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-14
下一篇2022-12-14

发表评论

登录后才能评论

评论列表(0条)

    保存