Caliburn.Micro WPF:如何创建具有依赖项的新 ViewModel?

Caliburn.Micro WPF: How can I create a new ViewModel that has a dependency?

我创建了一个名为 ShellView 的 window,它将加载或处理名称为 AViewBView.

我已经有了这个设置:

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<IWindowManager, WindowManager>();
        _container.Singleton<IEventAggregator, EventAggregator>();
        _container.RegisterPerRequest(typeof(ShellViewModel), null, typeof(ShellViewModel));
    }

    protected override object GetInstance(Type serviceType, string key)
    {
        return _container.GetInstance(serviceType, key);
    }

    protected override IEnumerable<object> GetAllInstances(Type serviceType)
    {
        return _container.GetAllInstances(serviceType);
    }

    protected override void BuildUp(object instance)
    {
        _container.BuildUp(instance);
    }
}

AViewModel.cs

public class AViewModel : Screen
{
    private IEventAggregator _eventAggregator;

    public AViewModel(IEventAggregator eventAggregator)
    {
        _eventAggregator = eventAggregator.
    }
}

这就是问题所在,我如何在 ShellViewModel 中传入事件聚合器的实例?

ShellView.cs

public class ShellViewModel : Conductor<Screen>
{
    public ShellViewModel()
    {
        // Should I create an instance and pass it in? If not, how?
        ActivateItem(new AViewModel(?));
    }
}
为此,

Caliburn.Micro 有一个名为 IoC 的静态 class。你应该这样做:

ActivateItem(IoC.Get<AViewModel>());

或者你可以这样做,如果有意义的话:

public class ShellViewModel : Conductor<Screen>
{
    private IEventAggregator _eventAggregator;

    public ShellViewModel(IEventAggregator eventAggregator)
    {
        _eventAggregator = eventAggregator;
        ActivateItem(new AViewModel(_eventAggregator));
    }
}