WinForms启动窗体可以用作Unity容器的复合根吗

WinForms启动窗体可以用作Unity容器的复合根吗,winforms,dependency-injection,inversion-of-control,unity-container,Winforms,Dependency Injection,Inversion Of Control,Unity Container,我在VisualStudio中将WinForms应用程序设置为N层解决方案。 我想使用WinForms应用程序中的第一个启动表单作为Unity注册和解析的位置。当表单开始启动时,这在初始化步骤中是正确的。如果我将Unity设置放在这里,那么我就不必担心从单独的项目向启动表单传递参数。启动窗体基本上是WinForms应用程序中所有窗体的主要窗体。所有其他表单直接或间接地从主表单派生 如果在主窗体中设置了Unity,我可以在这里注册所有要注入到所有其他子窗体和项目类中的接口类。这样做会导致任何严重的

我在VisualStudio中将WinForms应用程序设置为N层解决方案。 我想使用WinForms应用程序中的第一个启动表单作为Unity注册和解析的位置。当表单开始启动时,这在初始化步骤中是正确的。如果我将Unity设置放在这里,那么我就不必担心从单独的项目向启动表单传递参数。启动窗体基本上是WinForms应用程序中所有窗体的主要窗体。所有其他表单直接或间接地从主表单派生

如果在主窗体中设置了Unity,我可以在这里注册所有要注入到所有其他子窗体和项目类中的接口类。这样做会导致任何严重的问题吗?或者这种方法效果良好吗


我喜欢这种方法,因为这意味着我不必创建一个单独的项目来建立Unity,也不必注册该项目中的所有接口类来传递给第一个启动表单。

主表单的责任与UI相关,它与用户交互

如果遵循,则不希望在主窗体中添加另一个职责(编写应用程序)

更清楚地说,现在至少有两个原因需要更改主窗体类:

  • 您需要更改UI的外观
  • 您需要以不同的方式编写应用程序
  • 由于您担心的是您不想只为合成根创建一个特殊的项目,因此您仍然可以使用相同的Windows窗体项目,方法是将合成根放在
    Program.cs
    文件中
    Program
    类的
    Main
    方法中(对于C语言)实际创建并运行主窗体实例的文件