wpf 为特定的构造函数重载调用生成编译时错误[重复]

fbcarpbf  于 2023-08-07  发布在  其他
关注(0)|答案(1)|浏览(129)

此问题在此处已有答案

How to use d:DesignInstance with types that don't have default constructor?(3个答案)
28天前关闭。
如果在整个解决方案中的任何地方访问了构造函数的特定重载,是否可能生成编译时警告/错误?

详情

这是一个WPF桌面(.NET 7)项目。My Pages和UserControls使用d:DataContext="{d:DesignInstance Type=vm:UnderlyingVM}"功能来利用设计时智能感知。然而,底层VM需要在其构造函数中传递外部服务(标准IoC/DI内容),而设计器只能调用无参数构造函数。
为了解决这个问题,我在每个VM中定义了无参数的构造函数重载。这些重载的唯一用途和用法是设计器支持,并且决不能无意中从其他任何位置调用这些重载。如果在常规代码中的任何地方发现这样的调用,是否有方法生成编译时警告/错误?
我想到的一种方法是在无参数构造函数中使用以下内容:

if (!System.ComponentModel.DesignerProperties.GetIsInDesignMode(new DependencyObject()))
{
  #error ("This constructor can only be invoked from the WPF designer.");
}

字符串
遗憾的是,VM层是.NET Standard 2.0项目,因此无法引用.NET 6/7程序集。有人能提出一个替代方法吗?

ni65a41a

ni65a41a1#

你可以使用ObsoleteAttribute

public class Example
{
   [Obsolete("this constructor should only be used by the WPF designer")]
   public Example()
   {
   }
}

字符串
默认情况下,如果调用具有此属性的方法,将得到编译器警告。

相关问题