此问题在此处已有答案:
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程序集。有人能提出一个替代方法吗?
1条答案
按热度按时间ni65a41a1#
你可以使用
ObsoleteAttribute
:字符串
默认情况下,如果调用具有此属性的方法,将得到编译器警告。