【问题标题】:Bootstrapper DisplayRootFor<MV>() Exception: No parameterless constructor引导程序 DisplayRootFor<MV>() 异常:没有无参数构造函数
【发布时间】:2016-11-24 11:18:36
【问题描述】:

我需要创建一个简单的应用程序,其中MainViewModel 在初始化期间发生了一些事情。

当我尝试运行我的代码时,异常发生在DisplayRootViewFor&lt;MainViewModel&gt;(); 中的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
        }
    }
}

主视图:

<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

【问题讨论】:

    标签: c# mvvm ninject caliburn.micro bootstrapper


    【解决方案1】:

    您的 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
                }
            }
        }
    

    【讨论】:

    • 感谢您的回答。不幸的是,使 MainViewModel public 不起作用 - 异常仍然相同。
    • 你公开构造函数了吗?
    • 不,我没有。现在使用公共构造函数它可以正常工作。非常感谢:)
    猜你喜欢
    • 2019-07-12
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    • 2011-11-24
    相关资源
    最近更新 更多