Bootstrapper DisplayRootFor<MV>() 异常:没有无参数构造函数
Bootstrapper DisplayRootFor<MV>() Exception: No parameterless constructor
我需要创建一个简单的应用程序,其中 MainViewModel
在初始化期间会发生一些事情。
当我尝试 运行 我的代码时,异常发生在 AppBootstrapper
中的 DisplayRootViewFor<MainViewModel>();
行:
An exception of type 'System.MissingMethodException' occurred in mscorlib.dll but was not handled in user code
Additional information: No parameterless constructor defined for this object.
引导程序:
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
}
}
}
主视图:
<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>
如何摆脱这个异常?
编辑:
将 MainViewModel
的访问修饰符更改为 public
您的 MainViewModel
class 和构造函数没有访问说明符,因此它默认为私有。
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
}
}
}
我需要创建一个简单的应用程序,其中 MainViewModel
在初始化期间会发生一些事情。
当我尝试 运行 我的代码时,异常发生在 AppBootstrapper
中的 DisplayRootViewFor<MainViewModel>();
行:
An exception of type 'System.MissingMethodException' occurred in mscorlib.dll but was not handled in user code
Additional information: No parameterless constructor defined for this object.
引导程序:
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
}
}
}
主视图:
<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>
如何摆脱这个异常?
编辑:
将 MainViewModel
的访问修饰符更改为 public
您的 MainViewModel
class 和构造函数没有访问说明符,因此它默认为私有。
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
}
}
}