C# 使用Unity从其他对象属性解析构造函数依赖关系

C# 使用Unity从其他对象属性解析构造函数依赖关系,c#,dependency-injection,inversion-of-control,unity-container,prism,C#,Dependency Injection,Inversion Of Control,Unity Container,Prism,我有一个带有一系列用户控件的窗口,可以在其中进行切换。所有用户控件视图模型都依赖于存储在窗口视图模型中的内容。例如,窗口有一个用户属性,我需要在解析用户控件视图模型时将该属性提供给用户控件视图模型 我发现: container.Resolve<IFoo>(new ParameterOverrides<Foo> { { "name", "bar" }, { "address", 42 } });" 这看起来像我需要的,但是我的视图模型没有访问容器的权限。我想把它搬到一家工

我有一个带有一系列用户控件的窗口,可以在其中进行切换。所有用户控件视图模型都依赖于存储在窗口视图模型中的内容。例如,窗口有一个用户属性,我需要在解析用户控件视图模型时将该属性提供给用户控件视图模型

我发现:

container.Resolve<IFoo>(new ParameterOverrides<Foo> { { "name", "bar" }, { "address", 42 } });"
这看起来像我需要的,但是我的视图模型没有访问容器的权限。我想把它搬到一家工厂,但是视图模型是用Prism自动连接的


因此,本质上,我想知道如何为我的自动连线视图模型提供来自容器已经实例化的现有实例的参数?如果需要,视图模型可以注册为单例。如果我这样做,那么在我的引导程序中,我会在解析子视图模型的过程中解析父视图模型吗?如果是,在解析子视图模型的过程中,如何解析父窗口?

您说viewmodels无法访问容器,有什么原因不可以?您不能将容器作为参数传递给viewmodel构造函数吗?我试图将容器保持在根级别,并且只将依赖项传递给视图模型,因为这是DI的一种观点。然而,即使我将容器注入到VM中,也无法解决问题。Prism自动将VM连接到视图。当一个用户控件被实例化时,我没有办法进行构造函数Parma注入,因为父VM不知道子VM存在,所以无法提供从父到子的值。听起来你可能只使用了prism的一半。我发现一个人必须走一条路,然后它工作得很好。如果在父视图中定义区域并使用prism导航过程将用户控件加载到这些区域中,prism和unity或其他di将为子控件构建所需的视图模型。然后你可以通过这个过程精确地控制注入子控件的内容。是的,不幸的是,这个项目进展得太快,无法及时地改变我们的导航结构。我希望我一开始就一直使用棱镜,但我们没有。