c# - 在被动 View 架构中,我应该在哪里为 Presenter 类创建依赖项?

标签 c# refactoring dependency-injection mvp

我刚从演示者类中重构出一个新的领域类,但我不知道在哪里实例化它。

这是对维护不善的遗留项目进行的更大规模持续重构工作的一部分。

Presenter 当前正在由 View 的 OnLoad 事件创建, View 作为构造函数中的参数传递。 Presenter 中的所有公共(public)方法都是无参数的,并且返回 void。它们使用 View 的公共(public)属性与 View 通信。

View 本质上是一种不起眼的形式,完全取决于演示者的一切。

这是典型的被动 View 模式,我想继续坚持它。这让我进退两难。我需要创建一个新域对象的实例供演示者使用。

  • 如果我通过构造函数传递它,那么 View 必须创建它并获得不必要的依赖。
  • 如果我在 Presenter 中的任何位置创建它,我就无法在我的单元测试中用模拟对象替换它。
  • 如果我将它设为演示者的公共(public)属性,那么我会在使用它的演示者方法上引入创建顺序依赖性,但我仍然没有解决哪个外部类负责创建它。

我目前没有使用任何依赖注入(inject)框架。虽然我有兴趣在未来使用它,但源代码仍然非常脆弱,无法将第三方框架引入混合中。

我愿意接受任何建议。

最佳答案

我已经完成了!!! 看看这里 my repository .我在这里的选择是使用构造函数……满足最贪婪的要求我确定演示者已启动。在您的情况下,您可以从 View 中提供依赖项的特定实现。

玩得开心:)

关于c# - 在被动 View 架构中,我应该在哪里为 Presenter 类创建依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/849590/

相关文章:

c# - 快速傅立叶变换(FFT)在C#中的实现

c# - 异常使用 GetFunctionPointerForDelegate : "The specified Type must not be a generic type definition. "

c++ - 如何将函数传递给函数?

c# - 如何用 Dictionary<string, Func<>> 替换这个 switch-case ?

java - 重构多线程异步应用程序以防止线程过多

java - 处理运行时依赖性

c# - 如何在远程计算机上执行命令?

c# - 反转 SQL Server 中列的内容

java - 子组件中的 Dagger 2 模块覆盖

c# - StructureMap .Net Core Windows 服务嵌套容器