2011-07-17 6 views
1

Par exemple, j'ai fait un module pour Prism dans ce module il y a 2 dossiers Models and Services. Dans le dossier Modèles j'ai décrit la classe Car. Maintenant, je veux créer une instance de classe Car en utilisant l'usine. Question. Comment faire correctement cela.Question sur Prism 4

J'ai imaginé deux variantes.

1) Créez le nouveau dossier Infrastructure et ajoutez la classe CarFactory.

2) Créez un service CarService et utilisez-le pour créer une instance de classe Car.

Répondre

0

Utilisez le localisateur de service également utilisé par Prism. C'est généralement soit Unity, soit MEF.

+0

Dans ce scénario, l'OP doit probablement transmettre des paramètres à la classe 'Car' lorsqu'il est instancié. Si la classe 'Car' a des dépendances et a besoin de données d'instance, il est difficile de faire avec le' ServiceLocator' tout droit sans établir une sorte de pattern "Initialize". Une usine n'aurait pas cette limitation. 'IUnityContainer' a la capacité de passer des paramètres via' ParameterOverrides', mais le fait de contourner une référence au conteneur est généralement mal vu. –

0

Je préfère cette dernière approche. Cela nous permet de mieux isoler nos composants. Si votre ViewModel accepte un ICarService, vous pouvez facilement vous moquer de cela, et toute dépendance de votre implémentation de ICarService peut être raillée lors du test que.

Ceci est facile à comprendre et c'est un bon endroit pour mettre plus de logique qu'une usine typique le ferait. Par exemple, nous mettrions des méthodes que vous auriez normalement placées sur un dépôt. (Enregistrer, obtenir, etc).