Я окунаюсь в использование рамки IoC, и я решил использовать Unity. Одна из вещей, которые я до сих пор не полностью понимаю, - это то, как разрешать объекты глубже в приложении. Я подозреваю, что у меня просто не была лампочка в момент, которая будет ясно.
Итак, я пытаюсь сделать что-то вроде следующего в коде 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);
}
}
Я вижу три варианта:
- Создайте Singleton, чтобы сохранить контейнер единства, с которым я могу получить доступ в любом месте. Я действительно не поклонник такого подхода. Добавление такой зависимости, чтобы использовать инфраструктуру инъекций зависимостей, кажется немного на нечетной стороне.
- Передайте IUnityContainer в мой класс TestSuiteParser и каждый его дочерний элемент (предположим, что это n уровней глубоко или на самом деле около 3 уровней). Прохождение IUnityContainer повсюду просто выглядит странно. Мне просто нужно преодолеть это.
- Имейте момент лампочки на правильном пути использования Unity. Надеясь, кто-то может помочь щелкнуть переключателем.
[EDIT] Одна из вещей, о которых я не понимал, - это то, что я хочу создать новый экземпляр тестового примера для каждой итерации инструкции foreach. В приведенном выше примере необходимо проанализировать конфигурацию тестового набора и заполнить коллекцию объектов тестового случая