Ho seguito il breve tutorial sull'utilizzo di Castle Windsor in MVVM WPF: TUTORIAL
Ho impostato tutto (come per le basi) ma sono arrivato al punto di creare una nuova finestra dopo un clic del pulsante. Questo è dove mi sono perso.
In sostanza, da quello che ho imparato, il contenitore NON dovrebbe essere referenziato più di una volta.
public class Shell : IShell
{
public MainWindow window { get; set; }
public void Run()
{
window.Show();
}
}
public partial class App : Application
{
IWindsorContainer container;
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
container = new WindsorContainer();
container.Install(FromAssembly.This());
// Resolve Shell to start application
var start = container.Resolve<IShell>();
start.Run();
container.Release(start);
}
}
L'ho già fatto riferimento qui, all'avvio dell'applicazione, in modo che la mia MainWindow sia visualizzata e tutto sia correttamente collegato a questo.
Quindi, la mia domanda è:
How do I manage creation and showing of a new window, when this process i going to be initialized in a ViewModel?
L'unica cosa che sono riuscito a fare è stata:
-
Includi tutte le mie viste in quella shell descritta sopra, scrivi i metodi lì per la creazione di ogni finestra (proprio come funziona Run ())
-
Crea un ContainerManager? che sottoscrive gli eventi e inserisce il codice attualmente presente nella mia classe App ed estendilo in modo che risolva la shell del contenitore ogni volta che ho bisogno di creare una nuova finestra e chiamare un metodo appropriato per visualizzare una finestra.
La cosa sulla soluzione di cui sopra, è che mi sembra molto sbagliato per me e mi sembra di infrangere molti principi qui.