In order to obtain the region manager at work in the shell from other modules, I took the RegionManager argument passed into Shell by Prism, and assigned it to a member field.
public partial class Shell : Window
{
public IRegionManager x;
public Shell(IRegionManager regionManager)
{
InitializeComponent();
x = regionManager;
}
}
Next, in the Bootstrapper or wherever the module would be invoked from, grab that member field and pass it to your target module's constructor (which would be called before its initialize method).
protected override void InitializeShell()
{
Application.Current.MainWindow = (Shell) Shell;
Application.Current.MainWindow.Show();
IRegionManager u = ServiceLocator.Current.GetInstance<Shell>().x;
IModule firstScreen = new LoginModule.LoginModule(u);
Finally, in the target module's constructor, you can use as desired.
public void Initialize () {
IUnityContainer con = ServiceLocator.Current.GetInstance<IUnityContainer>();
con.RegisterType<Object, Login>("Login");
Region mainRegion = (Region) _regionMan.Regions["MainRegion"];
mainRegion.RequestNavigate(new Uri("Login", UriKind.Relative));
}
}
Hope this helps someone else with the same problem.