我正在尝试使用一个IoC框架,我选择了使用Unity.com。我仍然不完全理解的一件事是如何在应用程序中更深入地解析对象。我想我只是还没把电灯泡弄清楚。
因此,我试图在psuedo‘’ish代码中执行如下操作
void Workflow(IUnityContatiner contatiner, XPathNavigator someXml)
{
testSuiteParser = container.Resolve<ITestSuiteParser>
TestSuite testSuite = testSuiteParser.Parse(SomeXml)
// Do some mind blowing stuff here
}因此,testSuiteParser.Parse执行以下操作
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);
}
}我可以看到三个选择:
编辑我不清楚的一件事是,我想为foreach语句的每一次迭代创建一个新的测试用例实例。上面的示例需要解析测试套件配置并填充测试用例对象的集合。
发布于 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原则反复应用到应用程序的根类。
希望这能帮助那些和我一样困惑的人!:)
https://stackoverflow.com/questions/2386487
复制相似问题