Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在WPF PRISM应用程序中的多个项目之间仅使用一个类实例_C#_Wpf_Mvvm_Dependency Injection_Prism - Fatal编程技术网

C# 在WPF PRISM应用程序中的多个项目之间仅使用一个类实例

C# 在WPF PRISM应用程序中的多个项目之间仅使用一个类实例,c#,wpf,mvvm,dependency-injection,prism,C#,Wpf,Mvvm,Dependency Injection,Prism,我是WPF的初学者。 我遇到了一些我无法解决的问题。 我正在开发一个由8个项目组成的应用程序。(8模块棱镜) 我也在使用MVVM模式。我在其他项目/模块中使用了一些viewmodels。 如果这些viewmodels只是我的应用程序中的一个实例,我会喜欢它。这些包含ObservableCollections,这些ObservableCollections包含数据集的记录。 我试图使用依赖注入来解决这个问题,但我无法解决这个问题。 我不知道如何注册一个类,或者我不知道应该如何解决这个问题 大家能帮

我是WPF的初学者。 我遇到了一些我无法解决的问题。 我正在开发一个由8个项目组成的应用程序。(8模块棱镜) 我也在使用MVVM模式。我在其他项目/模块中使用了一些viewmodels。 如果这些viewmodels只是我的应用程序中的一个实例,我会喜欢它。这些包含ObservableCollections,这些ObservableCollections包含数据集的记录。 我试图使用依赖注入来解决这个问题,但我无法解决这个问题。 我不知道如何注册一个类,或者我不知道应该如何解决这个问题

大家能帮帮我吗

编辑1 昨天我做了一些改变。例如,在
数据操作模块
初始化
功能中

数据处理模块:

namespace PriceCalculator.Modules.DataManipulation
{
    [Module(ModuleName = ModuleNames.DataManipulationModule)]
    [ModuleDependency(ModuleNames.MainMenuModule)]
    public class DataManipulationModule : IModule
    {
        private readonly IRegionManager regionManager;
        private readonly IUnityContainer container;

        public DataManipulationModule(IUnityContainer container, IRegionManager regionManager)
        {
            this.container = container;
            this.regionManager = regionManager;
        }

        public void Initialize()
        {this.regionManager.RegisterViewWithRegion(RegionNames.MainContentRegion, () => this.container.Resolve<Views.DataManipulationView>());
        }
    }
}
编辑2 在那之后,我也更改了我的
引导程序。我添加了一个函数

引导程序配置容器功能:

protected override void ConfigureContainer()
                {
                    base.ConfigureContainer();
                    this.Container.RegisterInstance(typeof(PriceCalculator.Common.ViewModels.ButorlapViewModel), new PriceCalculator.Common.ViewModels.ButorlapViewModel());
                }
这部分地解决了我的问题。因此,
ButorlapViewModel
的实例已经存在,但是如果我在这个类中更改Observable集合,就会再次出现问题,因为它似乎会再次出现更多实例。在重新填充my
ObservableCollection
后,它在一个屏幕上显示的值与在另一个屏幕上显示的值不同

有人能帮我吗

编辑3 我已经解决了这个问题。注射很好。问题是另一个地方

因此,正确的注入如下所示。这是我的引导程序:

protected override void ConfigureContainer()
        {
            base.ConfigureContainer();

            this.Container.RegisterType<BaseViewModel>(new ContainerControlledLifetimeManager());

            this.Container.RegisterType<DataManipulationViewModelController>(new ContainerControlledLifetimeManager());
            this.Container.RegisterType<NewPriceCalculationViewModelController>(new ContainerControlledLifetimeManager());
        }
protected override void ConfigureContainer()
{
base.ConfigureContainer();
this.Container.RegisterType(新的ContainerControlledLifetimeManager());
this.Container.RegisterType(新的ContainerControlledLifetimeManager());
this.Container.RegisterType(新的ContainerControlledLifetimeManager());
}
这是我的一个构造函数,我在其中注入了:

public DataManipulationViewModelController(IRegionManager regionManager, IUnityContainer unityContainer)
        {
            this.regionManager = regionManager;
            MainMenuViewUri = new Uri(ViewUriNames.MainMenuView, UriKind.Relative);

            backToMainMenuCommand = new DelegateCommand(this.BackToMainMenu, this.CanBackToMainMenu);

            canBackToMainMenu = new bool[10] { true, true, true, true, true, true, true, true, true, true };

            this.baseViewModel = unityContainer.Resolve<BaseViewModel>();
        }
公共数据操作ViewModelController(IRegionManager regionManager、IUnityContainer unityContainer)
{
this.regionManager=regionManager;
MainMenuViewUri=新Uri(viewUrames.MainMenuView,UriKind.Relative);
backToMainMenuCommand=新的DelegateCommand(this.BackToMainMenu,this.CanBackToMainMenu);
canBackToMainMenu=newbool[10]{真的,真的,真的,真的,真的,真的,真的,真的,真的,真的};
this.baseViewModel=unityContainer.Resolve();
}

谢谢大家。

您在尝试使用DI时遇到了哪些具体问题?请用相关的代码示例进行说明。创建DataOperationViewModelController时,prism是否正在通过您的ctor传递ButorlapViewModel实例?您使用的是什么容器?
public DataManipulationViewModelController(IRegionManager regionManager, IUnityContainer unityContainer)
        {
            this.regionManager = regionManager;
            MainMenuViewUri = new Uri(ViewUriNames.MainMenuView, UriKind.Relative);

            backToMainMenuCommand = new DelegateCommand(this.BackToMainMenu, this.CanBackToMainMenu);

            canBackToMainMenu = new bool[10] { true, true, true, true, true, true, true, true, true, true };

            this.baseViewModel = unityContainer.Resolve<BaseViewModel>();
        }