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# 如何创建全局UnityContainer并在所有ViewModels中访问它?_C#_Wpf_Mvvm_Unity Container - Fatal编程技术网

C# 如何创建全局UnityContainer并在所有ViewModels中访问它?

C# 如何创建全局UnityContainer并在所有ViewModels中访问它?,c#,wpf,mvvm,unity-container,C#,Wpf,Mvvm,Unity Container,我的问题是: 我必须根据执行时需要的内容解析我的ViewModel中注册的类型 假设我从同一ICalculation接口继承了不同类型的计算类 在均值属性集上,我必须根据条件解析注册的类型 要根据条件解决此问题,我需要在我的ViewModel中使用一个全局容器对象 我使用的是微软的Unity。实际上,您根本不必使用全局容器。您可以使用创建的接口注册自己的容器。然后你可以使用构造函数注入,你可以在任何地方得到你的容器。 像这样, public class SampleModule

我的问题是:
我必须根据执行时需要的内容解析我的
ViewModel
中注册的类型

假设我从同一
ICalculation
接口继承了不同类型的计算类

在均值属性集上,我必须根据条件解析注册的类型

要根据条件解决此问题,我需要在我的
ViewModel
中使用一个全局容器对象


我使用的是微软的Unity。

实际上,您根本不必使用全局容器。您可以使用创建的接口注册自己的容器。然后你可以使用构造函数注入,你可以在任何地方得到你的容器。 像这样,

    public class SampleModule
        {
            readonly IObjectContainer container;

            public SampleModule(IObjectContainer container)
            {
              this.container = container;
            }
        }

显示您迄今为止所做的代码。将与tom共享我的代码。它在我的office桌面中。我添加了一些突出显示并改进了一些语法。公共部分类应用程序:应用程序{protected override void OnStartup(StartupEventArgs e){base.OnStartup(e);var bootStrapper=new bootStrapper();var container=bootStrapper.BootStrap();var mainWindow=container.Resolve();mainWindow.Show();}}会产生任何问题,这可能是个大问题。我提出的解决方案,由微软自己推荐。你们需要想一想,若这么多线程同时试图解析同一个对象,会发生什么。您的容器可以随时锁定。为了防止这种情况,您应该创建自己的对象并将其解析为基本容器。你的解决方案一开始可以解决,但是你在增加耦合,使用unity的目的是减少耦合是的,我理解。我有一个viewModel,它使用数据契约中的两个模型。我使用Fluent验证为模型编写规则。两个模型验证都在同一个域模块下注册,在构造函数中使用IUnityContainer。我想单独解决它,并在各自的属性setter上调用它的验证。对于这种情况,我有更好的方法吗?你应该使用策略进行setter注入模式方法。首先,你应该试着团结起来。它的统一性非常简单。只需将[Dependency]属性添加到属性中。然后你会得到结果。无论何时需要你的财产分开。您将获得该模型(作为viewmodel中的属性),而不会出现错误(空引用等)。有了这个,你也可以把你的担忧分开。之后,你们应该检查下一级分离的策略模式,只是为了注意,这只是为了改进你们的代码,不是必须的!