如何使用Caliburn Micro的IOC使用构造函数参数实例化视图模型?



在我的引导程序文件中,我想显示我的视图模型ONH836ViewModel的根视图。这个视图模型源自BaseViewModel,它有一个带有五个参数的构造函数:

public BaseViewModel(IExportedDataMonitor monitor, IGasLabWorklistService worklistService, IRawDataConduit rawDataConduit,
            ISettingService settingService, IDataReportingService dataReportingService)

以下是引导程序中的相关代码:

class AppInitializer : BootstrapperBase
    {
        SimpleContainer container = new SimpleContainer();
        public AppInitializer()
        {
            Start();
        }
        protected override void OnStartup(object sender, System.Windows.StartupEventArgs e)
        {
            base.OnStartup(sender, e);
            DisplayRootViewFor<ONH836ViewModel>();
        }
        protected override void Configure()
        {           
            container.RegisterSingleton(typeof(IExportedDataMonitor), null, typeof(FakeExportedDataMonitor));
            container.RegisterSingleton(typeof(IGasLabWorklistService), null, typeof(FakeGasLabWorklistService));
            container.RegisterSingleton(typeof(IRawDataConduit), null, typeof(FakeRawDataConduit));
            container.RegisterSingleton(typeof(ISettingService), null, typeof(FakeSettingService));
            container.RegisterSingleton(typeof(IDataReportingService), null, typeof(FakeDataReportingService));
            container.RegisterSingleton(typeof(BaseViewModel), null, typeof(ONH836ViewModel));
        }

OnStartup方法在DisplayRootView行上抛出一个NullReferenceException。我认为发生这种情况是因为我在Configure方法中做了错误的事情。有人能识别并纠正我的错误吗?

Start()应该是Initialize(),假设是v2.xx的CM。

container.Singleton<ONH836ViewModel>();

对于您的接口,我建议

container.Instance<IExportedDataMonitor>(new FakeExportDataMonitor());

他们可以被锁住。。。

container.Instance<IGasLabWorkListService>(new FakeGasLabWorklistService()) .Instance<IRawDataConduit>(new FakeRawDataConduit()) .Instance<ISettingService>(new FakeSettingService());

NullReference的原因很可能是由于构造函数中未调用Initialize()而从未调用Configure。

相关内容

  • 没有找到相关文章

最新更新