我们在一个项目中做了以下工作:
有一个 GlobalNotifier 类,它定义了我们想在应用程序的不同模块中使用的事件,像这样
public static class GlobalNotifier
{
public static event VoidEventHandler EnvironmentChanged;
public static void OnEnvironmentChanged()
{
if (EnvironmentChanged != null)
{
EnvironmentChanged();
}
}
}
然后,当您需要让应用程序的其余部分知道环境已更改时,您可以在任何地方引发此事件,就像这样
GlobalNotifier.OnEnvironmentChanged();
而且您也可以在任何您希望收到有关环境已更改的通知的地方订阅此事件。
public ReportingService()
{
GlobalNotifier.EnvironmentChanged += new VoidEventHandler(GlobalNotifier_EnvironmentChanged);
}
void GlobalNotifier_EnvironmentChanged()
{
//reset settings
_reportSettings = null;
}
因此,每当您更改环境时,您都会提出事件,并且需要了解并执行某些操作的每个人都会收到通知。
可能与您需要实现的目标相似。
另外,如果你需要传递参数,你可以随意定义事件,基本上 -
public static event VoidEventHandler<SomeObject, List<OtherObject>> SomethingUpdated;
public static void OnSomethingUpdated(SomeObject sender, List<OtherObject> associations)
{
if (SomethingUpdated != null)
{
SomethingUpdated(sender, associations);
}
}
// ...
MyClass.SomethingUpdated+= new VoidEventHandler<SomeObject, List<OtherObject>>(MyClass_SomethingUpdated);
// ...
void MyClass_SomethingUpdated(SomeObject param1, List<OtherObject> param2)
{
//do something
}