2016-11-24 2 views
0

Мне нужно создать простую программу, где в MainViewModel что-то происходит во время инициализации.Bootstrapper DisplayRootFor <MV>() Исключение: Без параметрического конструктора

Когда я пытаюсь запустить свой код, исключение происходит на линии DisplayRootViewFor<MainViewModel>(); в AppBootstrapper:

Исключение типа «System.MissingMethodException» произошло в mscorlib.dll, но не был обработан в пользовательском коде

Дополнительная информация: Нет конструктора без параметров, определенного для этого объекта.

Загрузчик:

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> 

Как я могу избавиться от этого исключения?

EDIT:

Изменено Acces модификатор MainViewModel к public

ответ

2

Ваш MainViewModel класса и конструктор не имеют спецификатор доступа так что это по умолчанию будет частным.

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

Спасибо за ваш ответ. К сожалению, создание 'MainViewModel'' public' не сработало - исключение остается тем же. –

+0

Вы сделали публичный конструктор? –

+0

Нет, я этого не делал. Теперь с публичными конструкторами он работает нормально. Спасибо Большое :) –

Смежные вопросы