gpt4 book ai didi

c# - 在多项目中引发自定义事件

转载 作者:太空宇宙 更新时间:2023-11-03 14:28:05 25 4
gpt4 key购买 nike

它涉及以下内容:我有两个项目,它们或多或少应该彼此独立存在。项目一是一种文件系统观察器。我的 UI 的另一个 cosnists。如果有新文件,文件观察器会引发一个事件。之后,文件中的数据应添加到数据库中。这就是粗略的背景故事。实际问题是,在文件观察器引发事件后,我想通知 UI 更新数据 View 。这意味着,该事件应由文件观察器引发,并且该事件应在 UI 的实现中注册。现在的主要问题是我需要两个项目的类实例。显然,这会导致循环依赖问题。当然有CP问题的接口(interface)解决方案,但这并不能解决问题,我需要同一个对象来创建数据和事件注册。希望你能帮我解决这个问题。谢谢。

最佳答案

为什么您认为在业务逻辑组件中需要一个 UI 实例?

要注册事件处理程序,您通常只需要来自调用程序集的实例(观察者,已包含在调用程序集中)和引用程序集的实例(您的程序集包含文件系统观察程序)。

然后你有例如以下结构:

逻辑汇编

public class MyCustomWatcher
{
public event EventHandler Event;

private void RaiseEventForWhateverReason()
{
if (Event != null)
{
Event(this, new Args());
}
}
public Data GetData()
{
//return the data
}
}

用 UI 组装: - 表单和 Controller 类型都在这里声明。

class Form : System.Windows.Forms.Form
{
public void DisplayNotification(Data data)
{
//actual code here
}
}

class Controller
{
private Form form;
private MyCustomWatcher watcher;

public void Init()
{
this.watcher = CreateWatcher();
RegisterEvents();
ShowForm();
}
void ShowForm()
{
//show
}
void RegisterEvents()
{
this.watcher.Event += HandleChange;
}

void HandleChange(object sender /*this will be the instance that raised the event*/, SomeEventArgs e)
{
//BTW: this.watcher == sender; //the same instance

form.DisplayNotification(this.watcher.GetData());
}
}

带 UI 的程序集引用带逻辑的程序集。这里没有循环依赖。

关于c# - 在多项目中引发自定义事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3360832/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com