Acessando o contêiner de unidade na classe de modelo de exibição

Eu tenho um shell que se parece com a barra de ferramentas e define minha região principal (um painel de quebra). O que eu preciso fazer é poder adicionar widgets ao shell e quando um widget é clicado, uma nova janela (visualização) é aberta. Abaixo está o que eu tenho até agora:

Criei uma classe de módulo que adiciona uma visão à região principal:

public class MyModule : IModule
{
  protected IUnityContainer Container { get; private set; }

  public MyModule(IUnityContainer container)
  {
    Container = container.CreateChildContainer();
  }

  public void Initialize()
  {
    var regionManager = Container.Resolve<IRegionManager>();
    MyModuleView myModuleView = new MyModuleView();
    regionManager.Regions["MainRegion"].Add(myModuleView);
  }
}

Aqui está o conteúdo do MyModuleView:

  <Grid>
    <Grid.DataContext>
      <vm:MyModuleVM/>
    </Grid.DataContext>
    <Button Content="My Module" Foreground="White" FontWeight="Bold" Command="{Binding Path=LaunchCommand}">
    </Button>
  </Grid>

O modelo de exibição, MyModuleVM:

  class MyModuleVM : ObservableObject
  {
    protected IUnityContainer Container { get; private set; }

    public MyModuleVM()
    {
    }

    RelayCommand _launchCommand;
    public ICommand LaunchCommand
    {
      get
      {
        if (_launchCommand == null)
        {
          _launchCommand = new RelayCommand(() => this.LaunchTestView(),
              () => this.CanLaunchTestView());
        }
        return _launchCommand;
      }
    }

    private void LaunchTestView()
    {
      TestView view = new TestView();
      view.Title = "Test View";
      var regionManager = Container.Resolve<IRegionManager>();
      regionManager.Regions["MyWindowRegion"].Add(view);
    }

    private bool CanLaunchTestView()
    {
        return true;
    }
  }

Então, meu plano era o seguinte:

Crie a classe que implementa IModule (MyModule) e faça com que ela carregue uma visualização (MyModuleView) no shell quando inicializada

Crie um modelo de exibição para o módulo (MyModuleVM) e configure-o como o DataContext da exibição exibida no shell

MyModuleVM contém um comando ao qual um botão no MyModuleView se liga. Quando o botão é clicado, o comando é acionado

Agora, aqui é onde estou preso. Usando um WindowRegionAdapter (um adaptador que ajuda a criar exibições em janelas separadas), eu queria criar e exibir uma nova exibição. Como visto em MyModuleVM, o LaunchTestView precisa acessar o contêiner para adicionar a exibição a uma região. Como devo chegar ao contêiner?

Além da minha pergunta específica sobre como acessar o contêiner, como está minha estratégia geral de adicionar "widgets" a um shell da barra de ferramentas e iniciar visualizações quando eles são clicados? Estou completamente fora dos trilhos aqui quando se trata de MVVM com Prism?

Obrigado rapazes.

questionAnswers(1)

yourAnswerToTheQuestion