【问题标题】:C# Event systemC# 事件系统
【发布时间】:2020-11-21 22:05:30
【问题描述】:

我在 c# 项目中使用 MVC,我的控制器知道模型,但我希望模型不知道控制器。因此,为了通知控制器有关更改,模型会触发控制器订阅的事件。这样我就认为模型不知道控制器,但它是吗?事件系统是事件发生时发布者调用自身的回调函数的抽象层(在我的情况下,模型是否调用控制器的函数?)或者事件的发布者是否真的触发了一个事件并且不知道谁收到?

【问题讨论】:

  • .NET 事件系统是一个非常简单的发布/订阅(又名观察者模式)系统。通过创建公共event,类发布 事件。当对象将delegate 添加到对象的事件内部订阅者列表时,该对象将订阅该事件。稍后,当发布者对象引发事件时,所有订阅者(如果有)都会收到通知。发布者不关心是否有 0、1 或多个订阅者,也不关心他们是谁,它只是引发事件。在您的情况下,模型将通过委托调用控制器,但这样做是盲目的
  • 模型应该不知道控制器,你不需要任何这种复杂的事件发布。
  • 如果您想要一种标准的 .NET 方式来执行此操作,请查看 INotifyPropertyChanged 接口 (docs.microsoft.com/en-us/dotnet/api/…)

标签: c# events publisher


【解决方案1】:

暴露事件的类不知道订阅者是谁。

使用事件是尊重您的条件的正确实施选择:

我的控制器知道模型,但我希望模型不知道控制器

您可以通过检查类耦合来验证这一点。您将看到公开事件的类不依赖于订阅该事件的类。如果这两个类都在不同的程序集中,则控制器程序集将需要对模型程序集的引用,而不是像您所期望的那样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-26
    • 2013-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多