gpt4 book ai didi

c# - 在 Multi-Tenancy Web 应用程序中使用事件委托(delegate)

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

我正在使用 asp.net Mvc 5 开发 Multi-Tenancy n 层 Web 应用程序。

在我的服务层中,我为每个重要操作定义自定义事件,并在这些操作执行后引发这些事件。例如

Public event EventHandler EntityCreated;

Public void Create(Entity item) {
Save(item);
......
EntityCreated(this, item);
}

我打算将业务规则和通知连接到这些事件。我想使用事件的主要原因是在不修改我的服务层的情况下,更多事件处理程序的逻辑解耦和轻松插入能力。

问题:在 asp.net 中使用事件和委托(delegate)有意义吗?

我在网上找到的大多数示例都是针对 win 表单或 wpf 的。在涉及多线程应用程序时,我获得了优势。此外,事件在每个表单中定义一次,并且在表单的整个生命周期内都处于事件状态。

但在我的例子中,事件将根据 http 请求进行。那么定义这些事件是否是一种开销?

最佳答案

正如其他人指出的那样,发布/订阅或事件总线是一种解决方案。另一个解决方案类似于您在这里尝试做的事情,但使其更正式。

让我们举一个创建客户的具体例子。您希望在应用程序中创建新客户时发送一封欢迎电子邮件。该域应该只关心创建客户并将其保存在数据库中,而不关心发送电子邮件等所有其他细节。因此,您添加了一个 CustomerCreated 事件。这些类型的事件称为领域事件,而不是按钮点击等用户界面事件。

当引发 CustomerCreated 事件时,应该在代码中的某处对其进行处理,以便它可以执行必要的操作。您可以像您提到的那样使用 EventHandlerService(但这很快就会涉及太多事件)或使用 Udi Dahan 的模式谈论。我已经成功地将 Udi 的方法与许多 DI 容器一起使用,这种模式的美妙之处在于您的类仍然符合 SRP。您只需要在应用程序引导时使用反射实现特定的接口(interface)和注册代码。

如果您需要有关此主题的进一步帮助,请告诉我,我可以与您分享代码片段以使其发挥作用。

关于c# - 在 Multi-Tenancy Web 应用程序中使用事件委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27747294/

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