2016-11-24 1 views
0

Ich muss eine einfache Anwendung erstellen, wo in MainViewModel etwas während der Initialisierung passiert.Bootstrapper DisplayRootFor <MV>() Ausnahme: Kein parameterloser Konstruktor

Wenn ich versuche, meinen Code auszuführen, tritt die Ausnahme auf der Leitung DisplayRootViewFor<MainViewModel>(); in AppBootstrapper:

Eine Ausnahme vom Typ 'System.MissingMethodException' ist in mscorlib.dll aufgetreten, wurde aber nicht in Benutzercode

behandelt

Weitere Informationen: Für dieses Objekt ist kein parameterloser Konstruktor definiert.

Bootstrapper:

using System; 
using Ninject; 
using Caliburn.Micro; 

namespace ChartsDisplayer2016 
{ 
    public class AppBootstrapper : BootstrapperBase 
    { 
     private IKernel kernel; 
     public AppBootstrapper() 
     { 
      Initialize(); 
     } 

     protected override void Configure() 
     { 
      kernel = new StandardKernel(); 
      kernel.Load(AppDomain.CurrentDomain.GetAssemblies()); 
      kernel.Bind<IEventAggregator>().To<EventAggregator>().InSingletonScope(); 
     } 
     protected override void BuildUp(object instance) 
     { 
      kernel.Inject(instance); 
     } 
     protected override void OnStartup(object sender, System.Windows.StartupEventArgs e) 
     { 
      base.OnStartup(sender, e); 
      DisplayRootViewFor<MainViewModel>(); 
     } 
    } 
} 

MainViewModel:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using ChartsDisplayer2016.Core.Charts.ViewModels; 
using Caliburn.Micro; 

namespace ChartsDisplayer2016.Core.Main.ViewModels 
{ 
    public class MainViewModel: Conductor<Screen>.Collection.OneActive 
    { 
     private readonly IEventAggregator eventAggregator; 
     private readonly IWindowManager windowManager; 

     MainViewModel() 
     { 
      //something important; 
     } 
     MainViewModel(IEventAggregator eventAggregator, 
      IWindowManager windowManager) 
     { 
      this.eventAggregator = eventAggregator; 
      this.eventAggregator.Subscribe(this); 
      this.windowManager = windowManager; 

      //something important 
     } 
    } 
} 

Mainview:

<UserControl 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      x:Class="ChartsDisplayer2016.Core.Main.Views.MainView" 
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="300"> 
    <Grid> 

    </Grid> 
</UserControl> 

Wie kann ich diese Ausnahme loswerden?

EDIT:

Changed Zugang Modifikator von MainViewModel zu public

Antwort

2

Ihre MainViewModel Klasse und Konstruktor haben keine Zugriffsbezeichner so wird standardmäßig privat.

namespace ChartsDisplayer2016.Core.Main.ViewModels 
    { 

     public class MainViewModel: Conductor<Screen>.Collection.OneActive 
     { 

      private readonly IEventAggregator eventAggregator; 
      private readonly IWindowManager windowManager; 


      public MainViewModel() 
      { 
       //something important; 
      } 
      public MainViewModel(IEventAggregator eventAggregator, 
           IWindowManager windowManager) 
      { 
       this.eventAggregator = eventAggregator; 
       this.eventAggregator.Subscribe(this); 
       this.windowManager = windowManager; 

       //something important 
      } 
     } 
    } 
+0

Vielen Dank für Ihre Antwort. Leider hat 'MainViewModel'' public' nicht funktioniert - die Ausnahme ist immer noch die selbe. –

+0

Haben Sie den Konstruktor öffentlich gemacht? –

+0

Nein, habe ich nicht. Jetzt mit öffentlichen Konstruktoren funktioniert es gut. Vielen Dank :) –

Verwandte Themen