views:

29

answers:

1

First of all I would like to remark I am new with the concept of prism, DI and containers. I am looking on one of the code samples provided with the Prism Library: The code simply injects a view with the "Hello World" string (in a TextBlock element) to a region in the shell.

When the application starts-up, it creates a new BootStrapper instance, which creates and initializes the shell:

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));
    }
}

My question refers to the method CreateShell(). I couldnt find nowhere in the supplied code (including not in a configuration file or any xaml file...) where do they register the type Shell, and even if it was registered - the supplies Shell class doesnt implement any interface... what is the meaning of resolving a specific type? the Shell implementation:

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

    }
}

This looks like a magic to me, so I tried to create my own type (MyType) and resolve it the same way:

Container.Resolve<MyType>();

By setting a breakepoint inside MyType constructor, I saw that it DID resolved MyType. Can somebody please explain to me how does it work?

+1  A: 

Hi,

These couple of threads should answer your question:

Additionally, if you are eager to get more detail into how Unity can do this, simple download Unity 2.0 and open the source code that is provided with the installer.

I hope this helps.

Thanks, Damian

Damian Schenkelman
Thanks a lot :)
ET