我发现在WPF中,通常不能仅在复合根中使用DI容器。我在根目录中设置了所有依赖项,但我发现需要实例化根本无法在根目录中实例化的视图模型。
以自定义控件为例,它们位于制表符中或在新窗口中生成。当视图本身处于活动状态时,它们的视图模型需要由视图本身实例化。我的许多视图模型都需要一个对话框提供程序,我将其作为接口注入VM构造函数。
我没有将DI容器用作服务定位器。我坚信构造函数注入,但正如我所说,我发现需要使用DI容器来实例化远远超出复合根的视图模型。到目前为止,我一直在使用一个托管DI容器的静态类,我可以在整个应用程序中使用它。
我只是想知道你们是如何解决这个问题的?
答案 0 :(得分:2)
我不是DI的专家,但我知道你不应该使用" DI容器"除了你的" BootStrapper"以外的任何地方或"撰写根"。
所以回答你的问题:出于某种原因,如果你不能在"组合根"中创建Type
的实例。你可以随时使用Abstract Factory pattern