【问题标题】:Is there a way to consume events just by copying a dll into bin?有没有办法通过将 dll 复制到 bin 中来消耗事件?
【发布时间】:2017-04-28 12:40:33
【问题描述】:

我有一个 asp.net Web 应用程序,它的应用程序事件很少;例如 - 创建用户。我的一位客户希望在创建新用户时收到通知。所以我有一个特定于该客户端的 dll,我可以通过注册到应用程序事件 onCreateUser 来放置发送通知的逻辑。

现在我想知道是否有更好和通用的方法,以便通过替换这个 dll,对于不同的客户端,我可以做其他事情而不是发送通知。或者通过简单地删除 dll,我可以关闭此行为。

编辑: 我知道可以通过使用属性(如 PreApplicationStartMethodAttribute)或使用接口等动态加载应用反射的 dll 来做到这一点。但想确保我没有重新发明轮子。

【问题讨论】:

  • 我会考虑动态加载程序集。如果您只是删除/替换它,则需要重新启动应用程序才能注册更改。
  • 谢谢迈克!通过动态加载,您的意思是搜索特定的接口实现还是使用任何属性?我最初认为 PreApplicationStartMethodAttribute 会解决这个问题;但不确定我是否能够使用这种方法注册自己的活动
  • 我的第一个倾向是动态加载 dll,然后使用反射来调用所需的方法。这是一个关于类似问题的 SO 线程:stackoverflow.com/questions/1137781/… 但您可以在 google/bing 上搜索“C# 动态加载程序集”,这应该可以帮助您开始
  • 迈克,动态加载是我最后的选择;我可以使用属性以更好的方式做到这一点。我可以找到具有该属性的类(甚至可能是方法)并调用它们,以便我可以在事件的多个 dll 中执行多个操作。但我要求使用框架中已有的东西来解决这个问题,而不是重新发明轮子

标签: c# asp.net dll event-handling


【解决方案1】:

我假设您正在尝试/已经为 OOP 实现了观察者模式? 因为那是我构建代码的模式。

所以伪代码:

 notification method{User createdUser}
{
   bool shouldNotify = dataHandler.getUserNotificationValue(createdUser);
   if(shouldNotify )
   {
       notifier.SendNotification();
   }
}

这将消除甚至拥有 DLL pr 客户端的要求,只需一个 db/xml 文件/等。需要通知的客户之间的关系列表。

【讨论】:

  • 我不能在我的原始代码中明确地提出这个条件。我正在寻找可插入的解决方案
  • 如果您根本无法更改原始代码,我不确定您将如何与插件交互。但也许您正在寻找针对简单地检测 DLL 是否存在的验证? stackoverflow.com/questions/2292578/…
猜你喜欢
  • 2011-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-23
  • 2012-05-28
  • 2020-02-27
  • 2023-03-15
  • 2023-02-02
相关资源
最近更新 更多