是否可以自定义WPF视图创建机制以使用我自己的ViewFactory?

是否可以自定义WPF视图创建机制以使用我自己的ViewFactory?,wpf,datatemplate,extensibility,Wpf,Datatemplate,Extensibility,如果视图构造函数作为参数所需的所有依赖项都注册在IoC容器中,我可以使用IoC自己创建视图,而不会出现任何问题 但若我试图广泛使用数据模板,那个么WPF会创建我的视图。若视图并没有默认构造函数,那个么WPF将失败并使整个应用程序崩溃。因此,我的问题是-WPF中是否有任何扩展点,以便我可以为其提供一个视图工厂,即使它们没有默认构造函数也可以创建我的视图?不幸的是,据我所知,答案是否定的。我只是在寻找同样的东西,但是WPF只能使用无参数构造函数创建用户控件 一种解决方案是使用服务定位器模式,在该模式

如果视图构造函数作为参数所需的所有依赖项都注册在IoC容器中,我可以使用IoC自己创建视图,而不会出现任何问题


但若我试图广泛使用数据模板,那个么WPF会创建我的视图。若视图并没有默认构造函数,那个么WPF将失败并使整个应用程序崩溃。因此,我的问题是-WPF中是否有任何扩展点,以便我可以为其提供一个视图工厂,即使它们没有默认构造函数也可以创建我的视图?

不幸的是,据我所知,答案是否定的。我只是在寻找同样的东西,但是WPF只能使用无参数构造函数创建用户控件


一种解决方案是使用服务定位器模式,在该模式中,用户控件可以访问其构造函数中的容器,并自行解析其依赖关系。我个人不喜欢这种模式。有些人称服务定位器为反模式,从长远来看,它可能会给您带来麻烦。

您使用的是哪种IoC容器?我建议使用Prism。我正在使用Prism,但据我所知,它不是一个IoC容器。作为国际奥委会,我使用Autofac。正如我所说的,我需要了解WPF的扩展点,以便为WPF提供我自己的(基于IoC的)视图工厂。Prism库包括UnityBootTrapper,它实现了将Unity用作IoC容器所必需的功能。你可以用同样的方法来编写你自己的工厂来解析类型。我想你不明白我的意思。我有IoC集装箱车,它对我来说很好用。但有时WPF本身(不是我)正在创建视图。在这种情况下,如果视图没有默认构造函数,WPF将抛出异常。我想要的是给WPF一个类,它将能够使用IoC容器来创建视图。我同意,自从发布以来,我还没有找到任何相关的内容。