Search code examples
silverlight-4.0unity-containerregionsprism-4

Problem with Prism RegionManager and Unity container


I have a main Silverilght project and other modules and I'm using Prism to glue them together along with Unity for Dependency Injection.

I have one of my modules that depends on an IRegionManager which, naturally, gets injected to it by Unity.

The issue I'm running to is that, the Regions property of the RegionManager that I get doesn't contain any regions even though I have declared two of them in my Shell as follows:

regions:RegionManager.RegionName="MainRegion"

I can't figure out the reason of this behavior. I've tried registering a RegionManager as a singleton using

Container.RegisterInstance<IRegionManager>(new RegionManager());

as well as leaving unity handle this. However, I got the same results :(

what I'm trying to achieve is to inject a view into a particular region and activate it, which can't be done using

_regionManager.RegisterViewWithRegion("MainRegion", typeof(MyView));

that's why I need to get hold of the "MainRegion" object itself and manipulate it.

I hope somebody has this figured out. I would be very thankful :)

Edit: I should mention that the view discovery works just fine, I can RegisterViewWithRegion, but when I check the Regions property of the RegionManager, I find it empty!


Solution

  • while thinking about this problem and the context in which it happened, it striked me that, like most bugs in software, the problem wasn't where I was looking!

    My setup was as follows: I started out with the Silverlight Business Application project template. this gave me a MainPage which I used as my Shell, and a couple of views(Home and About). Now, instead of having the regions sit on my Shell, I put them in the Home view, keeping the MainPage as kind of a master page.

    My take on this is that Prism sets a RegionManager for the Shell, and passes it around to whoever needs it (using a Dependency Injection Container). This way, when I asked for an IRegionManager in my module, I got the one for my Shell which doesn't really contain any region (hence the empty Regions property).

    To solve this, all I had to do was put my regions in their rightfull place: the Shell, and all is working well (for) now.

    Update: Seems like my "take on this" is actually correct :), this is an excerpt from the Prism Documentation: (under Scoped Regions)

    Views defining regions with attached properties automatically inherit their parent's RegionManager. Usually, this is the global RegionManager that is registered in the shell window