Caliburn.Micro WPF: IoC.Get возвращает значение Null - PullRequest
0 голосов
/ 30 мая 2018

Мой код выглядит так:

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

Но всякий раз, когда я запускаю программу, отображается пустой экран.Когда я отлаживал его, он говорил, что aViewModel - это null.

Что-то не так с Bootstrapper?

1 Ответ

0 голосов
/ 30 мая 2018

Исходя из предоставленного кода, AViewModel не зарегистрирован в контейнере в Bootstrapper, поэтому IoC не знает о его существовании, поэтому при запросе Get этот тип

будет возвращать нольНапример,

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

Все типы, которые необходимо разрешить с помощью IoC, должны быть сначала зарегистрированы в резервном контейнере.

...