C# 如何将IoC与生成的WinForms一起使用?

C# 如何将IoC与生成的WinForms一起使用?,c#,winforms,C#,Winforms,人们通常如何在WinForm应用程序中使用IoC?有什么最佳实践吗 我在问,因为VisualStudio为WinForms生成了很多代码,并为designer使用了无参数构造函数,那么我应该如何将依赖项注入到表单中呢?我应该总是创建另一个构造函数并使用它,让设计器管理无参数,还是通过属性注入依赖项?在WinForms项目中使用Autofac IoC后,我们总是有一个带依赖项的主构造函数和一个只供设计器使用的无参数构造函数,使用注释将其明确标记为这样。为了安全起见,在完成活动的“设计”阶段后,此构

人们通常如何在WinForm应用程序中使用IoC?有什么最佳实践吗


我在问,因为VisualStudio为WinForms生成了很多代码,并为designer使用了无参数构造函数,那么我应该如何将依赖项注入到表单中呢?我应该总是创建另一个构造函数并使用它,让设计器管理无参数,还是通过属性注入依赖项?

在WinForms项目中使用Autofac IoC后,我们总是有一个带依赖项的主构造函数和一个只供设计器使用的无参数构造函数,使用注释将其明确标记为这样。为了安全起见,在完成活动的“设计”阶段后,此构造函数甚至可能被注释掉


我绝对不会使用属性注入,因为管理构造函数参数更容易推理,也更不容易出错。

很明显,您已经知道保留无参数构造函数的解决方案。那么你问什么?这个问题的原因是因为我知道不止一种解决方案,但不知道它们的缺点。这就是我要求提供最佳实践的原因。WinForms中的IoC是一个令人费解的话题,因为它肯定不是死的,(.NET Core 3.0!),而现有的解决方案严重缺少一些设计师支持。我通过使用mock实现了完整的设计时支持,mock是由设计者使用的,而不是在运行时实际注入的。技巧包括在用户控件和表单构造函数中进行bool检查,以检查我是否在设计时,因此我可以设置一个mock,而不是从IoC容器中获取实例。