我正在开发一个组件,该组件执行使用 ioc 注册的任何接口的临时方法,并且执行时刻取决于不同的触发器。它必须能够将要执行的操作保存到数据库,所以我将方法名称、类型和参数列表(序列化为 BLOB)保存到数据库中,直到需要。
当触发发生时,我需要对类型的实例执行方法。当我使用依赖注入时,我将接口名称保存到数据库中(格式"Namespace.IInterface, AssemblyName"
)
要在 ioc 容器上运行Resolve<IInterface>()
方法,我需要它的实例Type
:
Assembly assembly = System.Reflection.Assembly.Load(assemblyName);
Type service = assembly.GetType(typeName);
object instance = IOCContainer.Resolve(service);
我的问题是:
- 如果我确定包含程序集已加载到应用程序域中,是否有更好的方法从其名称中获取类型的实例?(我尝试过简单
Type.Load(typeName)
但为空) - 如果相关程序集已加载,CLR 是否会优化该过程(使用已加载),还是我需要手动缓存程序集列表以防止反复加载相同程序集对性能的影响?