我正在尝试使用IoC框架,我选择使用Unity。其中一个我仍然不完全理解的问题是如何在应用程序中更深层次地解析对象。我猜想我还没有领悟清楚的灵光一现的时刻。
因此,我正在尝试使用类似于伪代码的以下内容:
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);
}
}
我能看到三种选择:
- 创建一个Singleton来存储我可以在任何地方访问的unity容器。我真的不喜欢这种方法。添加依赖项以使用依赖注入框架似乎有点奇怪。
- 将IUnityContainer传递给我的TestSuiteParser类和它的所有子类(假设它深度为n级,实际上大约为3级)。在各个地方传递IUnityContainer看起来很奇怪。也许我只是需要克服这个。
- 想出正确使用Unity的方法。希望有人可以帮我打开这个开关。
[编辑] 其中一个我不清楚的事情是,我希望为foreach语句的每次迭代创建一个新的测试用例实例。上面的示例需要解析测试套件配置并填充测试用例对象集合。