Je trempe mon orteil dans l'utilisation d'un framework IoC et j'ai choisi d'utiliser Unity. Une des choses que je ne comprends pas encore complètement est comment résoudre des objets plus profondément dans l'application. Je soupçonne simplement de ne pas avoir eu le déclic qui rendra cela clair.
Donc, j'essaie de faire quelque chose comme ce qui suit en code pseudo
void Workflow(IUnityContatiner contatiner, XPathNavigator someXml)
{
testSuiteParser = container.Resolve
TestSuite testSuite = testSuiteParser.Parse(SomeXml)
// Faire des choses incroyables ici
}
Donc, le testSuiteParser.Parse fait ce qui suit
TestSuite Parse(XPathNavigator someXml)
{
TestStuite testSuite = ??? // Je veux obtenir cela de mon conteneur Unity
List aListOfNodes = DoSomeThingToGetNodes(someXml)
foreach (XPathNavigator blah in aListOfNodes)
{
//EDIT Je veux obtenir cela de mon conteneur Unity
TestCase testCase = new TestCase()
testSuite.TestCase.Add(testCase);
}
}
Je vois trois options:
- Créer un Singleton pour stocker mon conteneur Unity auquel je peux accéder n'importe où. Je ne suis vraiment pas fan de cette approche. Ajouter une dépendance comme celle-ci pour utiliser un framework d'injection de dépendances semble un peu bizarre.
- Passer l'IUnityContainer à ma classe TestSuiteParser et à chaque enfant de celle-ci (supposez qu'elle soit n niveaux profonde ou en réalité d'environ 3 niveaux de profondeur). Passer l'IUnityContainer partout semble juste bizarre. Je dois peut-être m'en remettre à cela.
- Avoir le déclic sur la bonne façon d'utiliser Unity. En espérant que quelqu'un pourra m'aider à allumer l'interrupteur.
[EDIT] Une des choses sur lesquelles je n'étais pas clair est que je veux créer une nouvelle instance de test case pour chaque itération de la déclaration foreach. L'exemple ci-dessus doit analyser une configuration du test suite et peupler une collection d'objets de test case