首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >最好是创建一个单例来访问统一容器,还是通过应用程序传递它?

最好是创建一个单例来访问统一容器,还是通过应用程序传递它?
EN

Stack Overflow用户
提问于 2010-03-05 12:01:18
回答 4查看 20.3K关注 0票数 49

我正在尝试使用一个IoC框架,我选择了使用Unity.com。我仍然不完全理解的一件事是如何在应用程序中更深入地解析对象。我想我只是还没把电灯泡弄清楚。

因此,我试图在psuedo‘’ish代码中执行如下操作

代码语言:javascript
复制
void Workflow(IUnityContatiner contatiner, XPathNavigator someXml)
{
   testSuiteParser = container.Resolve<ITestSuiteParser>
   TestSuite testSuite = testSuiteParser.Parse(SomeXml) 
   // Do some mind blowing stuff here
}

因此,testSuiteParser.Parse执行以下操作

代码语言:javascript
复制
TestSuite Parse(XPathNavigator someXml)
{
    TestStuite testSuite = ??? // I want to get this from my Unity Container
    List<XPathNavigator> aListOfNodes = DoSomeThingToGetNodes(someXml)

    foreach (XPathNavigator blah in aListOfNodes)
    {
        //EDIT I want to get this from my Unity Container
        TestCase testCase = new TestCase() 
        testSuite.TestCase.Add(testCase);
    } 
}

我可以看到三个选择:

  1. 创建一个Singleton来存储我可以访问的任何地方的统一容器。我真的不喜欢这种方法。添加这样的依赖项来使用依赖注入框架似乎有点奇怪。
  2. 将IUnityContainer传递给我的TestSuiteParser类和它的每个子类(假设它是n层深度,或者实际上大约是3层深度)。到处传递IUnityContainer只是看上去很奇怪。我可能只需要忘掉这一切。
  3. 让灯泡时刻在正确的方式上使用团结。希望有人能帮我按一下开关。

编辑我不清楚的一件事是,我想为foreach语句的每一次迭代创建一个新的测试用例实例。上面的示例需要解析测试套件配置并填充测试用例对象的集合。

EN

Stack Overflow用户

发布于 2012-12-17 23:31:37

我是Dependency Injection的新手,我也有过这个问题。我很难把注意力放在DI上,主要是因为我专注于将DI应用于我正在处理的一个类,一旦我将依赖项添加到构造函数中,我立即试图找到某种方法将统一容器带到需要实例化该类的位置,以便能够在类上调用Resolve方法。因此,我一直在考虑将统一容器作为静态容器全局可用,或者将其封装在单个类中。

我读了这里的答案,并不真正理解所解释的是什么。最后帮助我“得到它”的是这篇文章:

http://www.devtrends.co.uk/blog/how-not-to-do-dependency-injection-the-static-or-singleton-container

这一段特别是“灯泡”时刻:

"99%的代码库应该不了解您的IoC容器。只有根类或引导程序才使用该容器,即使这样,构建依赖关系图并启动应用程序或请求所需的通常是一个解析调用。“

本文帮助我理解,实际上我不能访问整个应用程序的统一容器,而只能访问应用程序的根。因此,我必须将DI原则反复应用到应用程序的根类。

希望这能帮助那些和我一样困惑的人!:)

票数 13
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2386487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档