2014-06-16 16 views
5

Voglio usare l'Unità nella mia applicazione WPF utilizzando VS2012, ho definito contenitore unità come segue:WPF e Unity - Nessun costruttore corrispondente trovato il tipo

IUnityContainer unityContainer = new UnityContainer(); 
unityContainer.RegisterType<IMainViewModel, MainViewModel>(); 
var window = unityContainer.Resolve<MainWindow>(); 
window.Show(); 

mio costruzione della finestra si presenta come segue:

public MainWindow(IMainViewModel mainViewModel) 
     { 
      InitializeComponent(); 
      this.DataContext = mainViewModel; 
     } 

Quando eseguo l'applicazione ottengo il seguente errore:

An unhandled exception of type 'System.Windows.Markup.XamlParseException' occurred in PresentationFramework.dll

Additional information: 'No matching constructor found on type 'WPFClient.MainWindow'. You can use the Arguments or FactoryMethod directives to construct this type.' Line number '3' and line position '9'.

che cosa sto facendo di sbagliato?

+0

In quale file/posizione è stato inserito il codice in cui si registrano le dipendenze nel contenitore e si crea un'istanza della finestra principale? –

+0

override protetto OnStartup (StartupEventArgs e) in App.xaml.cs –

risposta

16

Nel tuo App.xaml, assicurarsi di aver eliminato la proprietà StartupUri="MainWindow.xaml" impostata. Poiché hai sostituito la OnStartup della tua applicazione e hai fornito un'istanza personalizzata di MainWindow, non dovresti lasciare la proprietà predefinita StartupUri impostata nel file App.xaml e WPF che tenta disperatamente di creare un'istanza di un tipo senza un costruttore predefinito.

+0

Grande! Molte grazie! –

+0

Siete i benvenuti! –

+1

Ho appena trascorso un bel po 'di tempo a lottare con questo bug - Expression Studio 4 cerca di essere intelligente e reinserisce StartupUri in base all'ultimo controllo creato. –

Problemi correlati