C# Prism 7.2如何将实例注入ViewModel另一个模块
我是一名新的WPF应用程序开发人员,使用PRISM和AKKA.NET框架 在Shell窗口的代码中,我创建了ActorSystem的一个实例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>(); }
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";
}