在.NET中,AssemblyLoadEventHandler委托用于接收应用程序域中程序集加载完成时的通知。当运行时会将某个程序集载入到AppDomain时,如果事先注册了对应事件的处理方法,系统便会调用该方法,使开发者能够在程序集可用后执行自定义逻辑。

委托的定义与事件来源
AssemblyLoadEventHandler位于System命名空间下,其签名如下:
public delegate void AssemblyLoadEventHandler(
object sender,
AssemblyLoadEventArgs args
);
该委托通常配合AppDomain类的AssemblyLoad事件使用。AppDomain表示应用程序域,是程序集运行的逻辑容器。通过向AppDomain.CurrentDomain.AssemblyLoad添加处理程序,即可监听当前域中的程序集加载动作。
如何绑定与使用
下面示例展示如何在控制台程序中登记事件并打印被加载程序集的名称:
using System;
using System.Reflection;
class Program
{
static void Main()
{
// 注册程序集加载事件
AppDomain.CurrentDomain.AssemblyLoad += OnAssemblyLoaded;
// 触发动态加载,例如反射载入一个程序集
Assembly.Load("System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
Console.ReadLine();
}
// 符合AssemblyLoadEventHandler签名的处理方法
static void OnAssemblyLoaded(object sender, AssemblyLoadEventArgs e)
{
Assembly asm = e.LoadedAssembly;
Console.WriteLine("已加载程序集:" + asm.FullName);
}
}
在上述代码中,OnAssemblyLoaded方法的参数e包含LoadedAssembly属性,可获取刚刚载入的程序集对象。通过sender可以得知事件来自哪个AppDomain。
典型应用场景
- 插件系统:当插件程序集被载入时自动注册类型或启动模块。
- 运行时监控:统计程序集加载顺序与数量,辅助排查依赖问题。
- 延迟初始化:某些资源仅在对应程序集就绪后才允许访问。
注意事项
需要注意,AssemblyLoad事件只在程序集载入完成后抛出,因此无法在载入前拦截。若需控制绑定过程,应使用AppDomain.AssemblyResolve事件。此外,在事件处理方法中应避免执行过分耗时的操作,以免影响主流程启动效率。
总结来说,AssemblyLoadEventHandler是.NET提供的用于响应程序集加载事件的委托,配合AppDomain.AssemblyLoad可轻松实现对运行时程序集变化的感知与处理。
AssemblyLoadEventHandlerAppDomain程序集加载修改时间:2026-07-26 22:39:16