C# Prism 7.2如何将实例注入ViewModel另一个模块

C# Prism 7.2如何将实例注入ViewModel另一个模块,c#,wpf,dependency-injection,prism,akka.net,C#,Wpf,Dependency Injection,Prism,Akka.net,我是一名新的WPF应用程序开发人员,使用PRISM和AKKA.NET框架 在Shell窗口的代码中,我创建了ActorSystem的一个实例 public partial class App { private ActorSystem appActorSystem; protected override Window CreateShell() { return Container.Resolve<MainWindow>(); }

我是一名新的WPF应用程序开发人员,使用PRISM和AKKA.NET框架

在Shell窗口的代码中,我创建了ActorSystem的一个实例

 public partial class App
{
    private ActorSystem appActorSystem;
    protected override Window CreateShell()
    {
        return Container.Resolve<MainWindow>();
    }

    protected override void RegisterTypes(IContainerRegistry containerRegistry)
    {
        appActorSystem = ActorSystem.Create(System.Reflection.Assembly.GetEntryAssembly()?.GetName().Name);
        containerRegistry.RegisterInstance(appActorSystem);
    }


    protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)
    {
        moduleCatalog.AddModule<CommandBar.CommandBarModule>();
    }

    protected override void OnExit(ExitEventArgs e)
    {
        appActorSystem.Terminate();
        appActorSystem.Dispose();
        base.OnExit(e);
    }
}
我的第一个想法是,我可以将IContainerProvider注入到ViewModel的构造函数中,如下所示:

public class ViewAViewModel : BindableBase
{
    private IContainerProvider _containerProvider;

    private string _message;
    public string Message
    {
        get { return _message; }
        set { SetProperty(ref _message, value); }
    }


    public ViewAViewModel(IContainerProvider containerProvider)
    {
        _containerProvider = containerProvider;
        var appActorSystem = _containerProvider.Resolve<ActorSystem>();

        Message = "test";
    }
}
公共类ViewAViewModel:BindableBase
{
私人IContainerProvider_containerProvider;
私有字符串消息;
公共字符串消息
{
获取{return\u message;}
set{SetProperty(ref_message,value);}
}
公共视图视图模型(IContainerProvider容器Provider)
{
_containerProvider=containerProvider;
var appActorSystem=_containerProvider.Resolve();
Message=“test”;
}
}
但它不起作用


您能解释一下如何正确操作吗?

注入依赖项,而不是容器:

public ViewAViewModel(ActorSystem appActorSystem)
{
    Message = "test";
}

服务在哪个模块中注册以及在哪里解析并不重要,只要在注册后解析即可。

您是否尝试使用
ActorSystem
而不是
IContainerProvider来注入视图模型?非常感谢。您的解决方案非常有效。你能解释一下它的工作机制吗?我没有找到相关的文档或示例。这对于评论来说太多了,我建议读几本关于“依赖注入”或“控制反转”的书。非常简短的总结:通过使用
ViewModelLocator
向容器注册类型,告诉他所需的使用寿命,告诉prism让容器创建视图模型,并且在这样做时,容器生成所有必需的构造函数参数(例如,根据请求的使用寿命在适当的时候创建新的构造函数参数)。对于棱镜特定部件,这是一个很好的解读:
public class ViewAViewModel : BindableBase
{
    private IContainerProvider _containerProvider;

    private string _message;
    public string Message
    {
        get { return _message; }
        set { SetProperty(ref _message, value); }
    }


    public ViewAViewModel(IContainerProvider containerProvider)
    {
        _containerProvider = containerProvider;
        var appActorSystem = _containerProvider.Resolve<ActorSystem>();

        Message = "test";
    }
}
public ViewAViewModel(ActorSystem appActorSystem)
{
    Message = "test";
}