2010-06-01 8 views
0

J'essaie de partager un service de données (Entity Manager) enveloppé dans un référentiel à partir d'un ViewModel (appelé 'AVM') dans le module A vers un ViewModel (appelé 'BVM') dans le module B, et je ne peux pas obtenir ce travail. Nous utilisons PRISM/Unity 2.0Comment obtenir une référence de conteneur enfant dans View Model

Ceci est mon scénario:

Un utilisateur peut ouvrir plusieurs écrans clients (vue composite mini-shell) chacun avec un autre client (unité de travail). Nous réalisons cela en utilisant des conteneurs pour enfants. Chaque conteneur enfant résout son propre référentiel avec son propre gestionnaire d'entités (le référentiel est un singleton dans le conteneur enfant). Ceci est fait dans le module A. Le shell principal a un gestionnaire de région principal, et chaque écran Client avec son conteneur enfant crée une région étendue. Dans chaque écran client, il y a une vue 'AV' (connectée à ViewModel 'AVM') avec une sous-région (contrôle onglet) enregistrée comme 'SubRegion'. Nous créons ceci avec une 'Screen Factory'

Dans le module B, nous avons une commande client dans View 'BV' et ViewModel 'BVM'. Dans le constructeur du module B, nous obtenons le conteneur principal par injection. Dans la méthode initialize, nous résolvons le gestionnaire de région (principal) et enregistrons View 'BV' avec. Dans le constructeur de View 'BV' un ViewModel 'BVM' est injecté/créé.

Maintenant, cela fonctionne, mais ViewModel 'BVM' ne peut pas obtenir le conteneur enfant. Il obtient seulement le conteneur principal. Est-ce faisable, ou dois-je le faire d'une autre manière?

Merci, Niels

Répondre

0

Il y a deux possibilités:

option Mon préféré est le faire entièrement à l'intérieur d'un modèle de liaison spécialisé pour Ioc - qui est ce que vous aurez à faire de toute façon. J'aime le modèle qu'Autofac utilise et le code spells it out quite succinctly.

Je n'ai aucune idée de l'unité - Je ne l'ai pas touchée depuis la v1.1. Si vous produisez la vôtre, une méthode consiste à prendre le conteneur enfant créé et à l'enregistrer dans TLS. Vous pouvez ensuite remplacer la fonctionnalité du classeur de modèle Ioc pour aller après le conteneur enfant stocké TLS. Assez hackish, mais je ne suis pas sûr d'une autre façon. J'irais avec l'option n ° 1 ci-dessus d'abord et avant tout. Regardez l'option # 2 comme un moyen seulement d'étudier les options par rapport à l'unité.

+0

Merci pour votre réponse. Pour le moment, je crée une usine qui les lie tous ensemble. Je vais regarder dans Autofac. – user355536

Questions connexes