gpt4 book ai didi

dependency-injection - 非平凡 WinForm 应用程序中的依赖注入(inject)

转载 作者:行者123 更新时间:2023-12-02 01:35:22 30 4
gpt4 key购买 nike

我想问问谁可以帮助将依赖注入(inject)引入示例 WinForm 应用程序。我们有一个具有以下结构的应用程序(不完整的图表):

MainForm <-> MainModel
| |└ -----------------------┐
| └ ------------┐ |
FA <-> MA FB <-> MB FC <-> MC
| | |└-----------------┐
| └-----------┐ └----┐ |
FAA <-> MAA FAB <-> MAB FCA <-> MCA FCB <-> MCB
|||
┌--------------┘|└----------------┐
FCAA <-> MCAA FCAB <-> MCAB FCAC <-> MCAC
||
┌--------------┘└----------------┐
FCAAA <-> MCAAA FAB <-> MAB

我可以实现组合根,我可以在其中输入如下内容:

var container = new Container();
container.RegisterSingle<IMainForm, MainForm>();
container.Register<IMainModel, MainModel>();
container.Register<IFA, FA>();

...

我知道如何获取第一个 MainForm 并显示它(简单的解析)。但我仍在为如何按需创建其他形式和模型的正确逻辑而苦苦挣扎。我不想将对我的容器的引用传递到 mainform 中并解析 mainform 中的依赖项,因为它闻起来像服务定位器模式。我想避免使用 CreateFA、CreateFB、CreateFAAA 等方法创建晦涩难懂的工厂...我也想避免将完整的构造图传递到主窗体中。

此外,我想在 MCAA 中使用一些可以在组合根中定义的接口(interface) IJob 的实现,但我想避免通过所有级别的表单传递 IJob 的实例或传递某种工厂...

如何创建窗口和模型等的所有实例的最简单方法。我需要他们使用 ServiceLocator...但是,好吧...那么 DI 呢?

首选DI:SimpleInjector,首选语言:C#

最佳答案

我认为您基本上有 3 个选择,不是吗?虽然你已经确定你不喜欢其中的两个 :)

  • 将表单的实例从组合根注入(inject) MainForm
  • 将用于创建所有表单的单个工厂注入(inject)组合根中的 MainForm
  • 将许多用于单独创建每个 Form 的工厂注入(inject)到组合根中的 MainForm 中。

我更喜欢第三个选项而不是第二个,因为每个表单只需要它实际需要创建的表单的工厂。

第一个选项的可行性可能取决于您的表单是否为单实例。

DI 和容器不会神奇地为您提供解决方案,它们只会让您更轻松地连接您喜欢的解决方案。

关于dependency-injection - 非平凡 WinForm 应用程序中的依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31478618/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com