【发布时间】:2012-09-04 10:21:37
【问题描述】:
我正在开发一个组件,该组件执行使用 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 的名称中获取实例,如果
我确定包含程序集已加载到应用程序域中? (我尝试了简单的
Type.Load(typeName)但得到了 null) - 如果相关程序集已加载,CLR 会优化该过程(使用已加载),还是我需要手动缓存程序集列表以防止反复加载相同程序集对性能的影响?
【问题讨论】:
标签: c# performance clr .net-assembly system.reflection