猿问

Caliburn.Micro WPF:IoC.Get 返回 Null

我的代码如下所示:


引导程序


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);

    }

}

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


有什么问题Bootstrapper吗?


开心每一天1111
浏览 332回答 1
1回答

拉莫斯之舞

根据提供的代码,AViewModel未在 Bootstrapper 中的容器中注册,因此IoC不知道它存在,因此当请求Get该类型时它将返回 null例如_container.RegisterPerRequest(typeof(AViewModel),&nbsp;null,&nbsp;typeof(AViewModel));所有需要解析的类型IoC都应该首先向后备容器注册。
随时随地看视频慕课网APP
我要回答