【问题标题】:Caliburn.Micro WPF: IoC.Get Returns NullCaliburn.Micro WPF:IoC.Get 返回 Null
【发布时间】:2018-05-30 03:07:17
【问题描述】:

我的代码如下所示:

Bootstrapper.cs

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.cs

public class ShellViewModel : Conductor<Screen>
{
    public ShellViewModel
    {
        var aViewModel = IoC.Get<AViewModel>();
        ActivateItem(aViewModel);
    }
}

但是每当我运行程序时,都会显示一个空白屏幕。当我调试它时,它说aViewModelnull

Bootstrapper 有什么问题吗?

【问题讨论】:

    标签: c# wpf mvvm caliburn.micro


    【解决方案1】:

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

    例如

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

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

    【讨论】:

    • 快速提问,您是注册所有视图模型以进行导航还是有其他导航方式?
    • 凡是需要容器解决的,都需要在容器中注册。这将包括您的视图模型。
    猜你喜欢
    • 2017-12-06
    • 1970-01-01
    • 2020-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-21
    • 2020-06-19
    相关资源
    最近更新 更多