À ce moment-là, j'ai rencontré une situation avec Unity que je ne sais pas comment résoudre/approcher ... Voici mon problème.Unity IoC et l'enregistrement des types primitifs
Je développe une application WPF et j'utilise MVVM (Prism Implimentation d'où le conteneur Unity). J'ai un ViewModel appelé MenuItemsViewModel
(pluriel) qui contient un IEnumerable
de MenuItemViewModel
(au singulier). Dans le constructeur de la MenuItemsViewModel
je peuplant cette collection d'une fonction de générateur comme ça ...
yield return new MenuItemViewModel(eventAggregator)
{
Text = "Dashboard",
CommandText = "DASHBOARD"
};
yield return new MenuItemViewModel(eventAggregator)
{
Text = "Areas",
CommandText = "AREAS"
};
yield return new MenuItemViewModel(eventAggregator)
{
Text = "Users",
CommandText = "USERS"
}; //etc....
Je ne veux pas vraiment faire cela, mais plutôt compter sur le conteneur pour construire ces objets pour moi mais comment diable vais-je faire cela? Je ne veux pas vraiment que mon objet ViewModel ait une quelconque connaissance de mon objet ViewModel autre que l'interface qu'il implémente mais j'ai environ 15 de ces éléments de menu, chacun avec des valeurs de propriétés différentes. Je ne suis pas complètement nouveau à DI/IoC mais c'est une grande question pour moi. Je vois et j'ai bénéficié de l'injection de mes services mais que faites-vous des valeurs concrètes?
Suis-je totalement dans les mauvais termes ici? Dois-je simplement résoudre l'instance concrète du conteneur et puis définir les propriétés? Ce serait une option mais j'aime que mes accessoires soient en lecture seule si possible.
J'espère que cela est assez clair, .. me crier sinon :-)
Toute aide est très appréciée.
En fait, si MenuItemsViewModel a un constructeur qui prend un MenuItemViewModel [] (doit être un tableau), la résolution de la dépendance par défaut devrait lancer et volonté injecter automatiquement toutes les instances nommées de MenuItemViewModel pour vous. –
@Chris vous avez raison +1 – onof
Génie, ... génie! Merci beaucoup :-) – Stimul8d