为了账号安全,请及时绑定邮箱和手机立即绑定

Caliburn.Micro WPF:IoC.Get 返回 Null

Caliburn.Micro WPF:IoC.Get 返回 Null

C#
开心每一天1111 2021-07-07 09:01:34
我的代码如下所示:引导程序public class Bootstrapper : BootstrapperBase{    private SimpleContainer _container = new SimpleContainer();    public Bootstrapper()    {        Initialize();    }    protected override void OnStartup(object sender, StartupEventArgs e)    {        base.OnStartup(sender, e);        DisplayRootViewFor<ShellViewModel>();    }    protected override void Configure()    {        _container.Singleton<IEventAggregator, EventAggregator>();        _container.Singleton<IWindowManager, WindowManager>();        _container.RegisterPerRequest(typeof(ShellViewModel), null, typeof(ShellViewModel));       }    protected override object GetInstance(Type service, string key)    {        return _container.GetInstance(service, key);    }    protected override IEnumerable<object> GetAllInstances(Type serviceType)    {        return _container.GetAllInstances(serviceType);    }    protected override void BuildUp(object instance)    {        _container.BuildUp(instance);    }}我的ShellViewModel样子是这样的:ShellViewModel.cspublic class ShellViewModel : Conductor<Screen>{    public ShellViewModel    {        var aViewModel = IoC.Get<AViewModel>();        ActivateItem(aViewModel);    }}但是每当我运行程序时,都会显示一个空白屏幕。当我调试它时,它说aViewModel是null.有什么问题Bootstrapper吗?
查看完整描述

1 回答

?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

根据提供的代码,AViewModel未在 Bootstrapper 中的容器中注册,因此IoC不知道它存在,因此当请求Get该类型时它将返回 null

例如

_container.RegisterPerRequest(typeof(AViewModel), null, typeof(AViewModel));

所有需要解析的类型IoC都应该首先向后备容器注册。


查看完整回答
反对 回复 2021-07-11
  • 1 回答
  • 0 关注
  • 331 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信