📅  最后修改于: 2023-12-03 15:12:29.365000             🧑  作者: Mango
System.Reflection.Assembly
在 C# 中, System.Reflection.Assembly
类型表示一个程序集,它具有获取程序集的信息和元数据的能力。有时,程序员会遇到 System.Reflection.Assembly
对象重复的情况。
当在多个程序集中引用同一个程序集时,就会出现重复的 System.Reflection.Assembly
对象。每个程序集都会创建自己的 System.Reflection.Assembly
对象,因此它们会存在不同的实例。
Assembly.Load
方法可以使用 System.Reflection.Assembly.Load
方法来加载程序集并获取该程序集的 System.Reflection.Assembly
对象。这个方法会将程序集加载到当前应用程序域中,如果已经加载了该程序集,则返回已加载的程序集的实例。
Assembly assembly = Assembly.Load("MyAssembly");
Assembly.GetExecutingAssembly
或 Assembly.GetCallingAssembly
方法当需要获取当前正在执行的程序集的 System.Reflection.Assembly
对象时,可以使用 Assembly.GetExecutingAssembly
方法。如果需要获取调用当前方法的程序集,则可以使用 Assembly.GetCallingAssembly
方法。
using System.Reflection;
Assembly executingAssembly = Assembly.GetExecutingAssembly();
Assembly callingAssembly = Assembly.GetCallingAssembly();
如果在应用程序的多个地方需要使用同一个程序集,可以使用单例模式来保证只有一个 System.Reflection.Assembly
对象的实例。通过依赖注入,可以将该实例注入到需要使用它的类中。
public interface IMyAssemblyAccessor
{
Assembly GetAssembly();
}
public class MyAssemblyAccessor : IMyAssemblyAccessor
{
private static Assembly _assembly = Assembly.Load("MyAssembly");
public Assembly GetAssembly()
{
return _assembly;
}
}
public class MyClass
{
private readonly Assembly _assembly;
public MyClass(IMyAssemblyAccessor myAssemblyAccessor)
{
_assembly = myAssemblyAccessor.GetAssembly();
}
}
重复的 System.Reflection.Assembly
对象是由于多个程序集引用同一个程序集而导致的。可以使用 Assembly.Load
方法、Assembly.GetExecutingAssembly
方法或 Assembly.GetCallingAssembly
方法来获取 System.Reflection.Assembly
对象的实例。对于需要在多个地方使用同一个 System.Reflection.Assembly
对象的场景,可以使用单例模式和依赖注入来保证只有一个实例的存在。