gpt4 book ai didi

c# - 创建类似 Google Labs 的扩展功能

转载 作者:行者123 更新时间:2023-11-30 17:23:28 25 4
gpt4 key购买 nike

我不确定问这个问题是否合适,因为它非常具体,但无论如何......

在我正在处理的这个应用程序中,我有一个基于 static events 的扩展系统.整个想法主要来自于 BlogEngine.NET 中创建的(非常酷的)扩展系统。 .

本质上,在 Application_Start 上,创建了一个扩展实例,它 Hook 到应用程序中类的静态事件。
以一个扩展程序为例,该扩展程序在将其显示到页面之前从论坛消息中审查黑名单中的单词;当 ForumMessage.OnDisplaying 事件被触发时,扩展程序将采用 ForumMessage 发件人对象并将列入黑名单的单词替换为乱码。

例子:

static class WordBlackListExtension {
private static string[] _blacklist = new string[] { ... };
static WordBlacklistExtension() { ForumMessage.OnDisplaying += DoWork; }
private static void DoWork(object sender, EventArgs e) {
// Do some blacklist filtering...
((ForumMessage)sender).Body = ...;
}
}

但是,由于 App Domain 中的每个扩展只有一个实例,我觉得这只适用于每个扩展都有一个单一的系统范围配置的系统。
但是,如果我想要按论坛或按用户控制这些扩展,就像在 Google Labs 中一样,该怎么办?按论坛黑名单,或按用户启用/禁用扩展程序的能力?
我必须将附加信息传递给扩展程序。

所以这是我无法理解的部分 - 假设我有一个相当复杂的对象模型(因此做类似 ForumMessage.Forum.etc.Config 的事情是不好的做法);

您建议如何将该信息传递给每个扩展程序?
每个扩展都应该检索自己的配置吗?也许通过 EventArgs 传递某种上下文对象?
我在哪里可以确定要检索哪个论坛的配置?

你能为这类系统想出更好的设计吗?

编辑

谁能推荐一些关于插件系统的阅读 Material ?
非常感谢任何专门针对网络环境的内容。

最佳答案

如果您想保持当前的扩展系统设计,我会去实现一个特定于您的每个事件的自定义 EventArgs 类。通过这种方式,您可以传递各种配置或简单的标识数据。

然后您的扩展提供者可以根据传递的信息采取行动。例如,他们可以配置为仅响应特定论坛等。

关于c# - 创建类似 Google Labs 的扩展功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2177712/

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