【发布时间】:2020-11-21 22:05:30
【问题描述】:
我在 c# 项目中使用 MVC,我的控制器知道模型,但我希望模型不知道控制器。因此,为了通知控制器有关更改,模型会触发控制器订阅的事件。这样我就认为模型不知道控制器,但它是吗?事件系统是事件发生时发布者调用自身的回调函数的抽象层(在我的情况下,模型是否调用控制器的函数?)或者事件的发布者是否真的触发了一个事件并且不知道谁收到?
【问题讨论】:
-
.NET 事件系统是一个非常简单的发布/订阅(又名观察者模式)系统。通过创建公共
event,类发布 事件。当对象将delegate添加到对象的事件内部订阅者列表时,该对象将订阅该事件。稍后,当发布者对象引发事件时,所有订阅者(如果有)都会收到通知。发布者不关心是否有 0、1 或多个订阅者,也不关心他们是谁,它只是引发事件。在您的情况下,模型将通过委托调用控制器,但这样做是盲目的 -
模型应该不知道控制器,你不需要任何这种复杂的事件发布。
-
如果您想要一种标准的 .NET 方式来执行此操作,请查看 INotifyPropertyChanged 接口 (docs.microsoft.com/en-us/dotnet/api/…)