我有我正在编写的这个应用程序,由于它的大小,它在组织方面变得有点灾难。我认为这将是使用 StructureMap v3.1.4.143 实现 IoC 的理想选择。
我正在我的 Program.cs 中设置我的对象图并创建一个应用程序上下文,该上下文在其构造函数中具有一些依赖项。其中之一是启动画面形式。当应用程序上下文运行时,它会显示此表单,并根据初始化时发生的情况更新表单上的当前状态。
这个对象是非常临时的,一旦我处理它,StructureMap 会用它做什么?它是否以某种方式缓存对象?如果确实以某种方式缓存了对象,那么将其保留为根和处置似乎有点浪费。我应该使用嵌套容器吗?如果我可以管理它,我会尽量避免传递容器,并且应用程序上下文必须在调用 Application.Run (它是模态的)时处理这个对象。那么有没有好的方法来处理这种情况呢?我真的不想让对象闲逛,当它们不再使用时,GC 无法访问它们。
这会导致另一个可能出现的设计问题:如果我单击一个按钮,然后创建、使用和处理一个新表单,我将如何通过 StructureMap 处理这个问题?我需要在运行时创建表单,并且只能按需创建。而且我不想在用户完成后保留它(我认为这很浪费)。如果我处置表单,并使用由 StructureMap 注入的工厂方法创建一个新实例,它会以处置状态返回前一个实例吗?
现在只是为了解决这个问题:在表单关闭时“隐藏”它不是一个选项。
这确实是一种不同的思维方式,我当然不习惯。因此,任何指导将不胜感激。