2010-10-10 10 views
0

Tout d'abord, je voudrais dire que je suis nouveau avec le concept de prisme, DI et conteneurs. Je regarde un des exemples de code fournis avec la bibliothèque Prism: Le code injecte simplement une vue avec la chaîne "Hello World" (dans un élément TextBlock) à une région dans le shell.Résoudre un type sans enregistrer premier - prisme 4 et untiy

Lorsque l'application démarre-up, il crée une nouvelle instance de BootStrapper, qui crée et initialise la coquille:

public class Bootstrapper : UnityBootstrapper 
{ 
    protected override DependencyObject CreateShell() 
    { 
     return Container.Resolve<Shell>(); 
    } 

    protected override void InitializeShell() 
    { 
     base.InitializeShell(); 

     Application.Current.RootVisual = (UIElement)this.Shell; 
    } 

    protected override void ConfigureModuleCatalog() 
    { 
     base.ConfigureModuleCatalog(); 

     ModuleCatalog moduleCatalog = (ModuleCatalog)this.ModuleCatalog; 
     moduleCatalog.AddModule(typeof(HelloWorldModule.HelloWorldModule)); 
    } 
} 

Ma question porte sur la méthode CreateShell(). Je ne pourrais pas trouver nulle part dans le code fourni (y compris pas dans un fichier de configuration ou un fichier xaml ...) où inscrivent-ils le type Shell, et même si elle a été enregistrée - la classe Shell fournitures n'implémente aucune interface ... est la signification de la résolution d'un type spécifique? la mise en œuvre Shell:

public partial class Shell : UserControl 
{ 
    public Shell() 
    { 
     InitializeComponent(); 

    } 
} 

Cela ressemble à une magie pour moi, alors j'ai essayé de créer mon propre type (MyType) et le résoudre de la même façon:

Container.Resolve<MyType>(); 

En définissant un breakepoint intérieur Constructeur MyType, j'ai vu que DID a résolu MyType. Quelqu'un peut-il m'expliquer comment ça marche?

Répondre

0

Vous n'avez pas besoin d'enregistrer un type que vous voulez résoudre. Vous devez enregistrer les dépendances d'un type que vous voulez résoudre. Dans ce cas, l'environnement Shell n'a pas besoin de dépendances, vous pouvez donc le résoudre simplement. Mais pour un exemple (pas vraiment), si votre shell obtient une interface IService en tant que paramètre, alors vous devez enregistrer IService, avant de résoudre Shell.

Sinon, vous obtiendrez une exception de résolution de dépendance a échoué. Dans Prism 4.1, il sera avalé silencieusement grâce à TryResolve.