我正在开发一个组件,它执行向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),但得到了null)发布于 2012-09-04 10:31:40
typeName包含程序集名称(类似于MyNamespace.MyType, MyAssembly version=1.0.0.0,publicKeyToken=12345etc),那么Type.Load(typeName)将得到您的类型,但不为null;发布于 2012-09-04 10:32:15
如果我确信包含程序集已经加载到应用程序域中,那么是否有更好的方法从其名称中获取Type实例?(我尝试了简单的Type.Load(typeName),但获得了null)
不是的。
如果程序集已经加载,CLR是否会优化该过程(使用已加载的程序集)
是。
每个程序集只加载一次。
发布于 2012-09-04 13:34:39
如果程序集已经加载,CLR是否会优化该过程(使用已加载的程序集)
对这个问题的回答是关于MSDN文章第二步 of 运行时如何定位程序集的。
如果请求的程序集具有,则在以前的calls__中也请求,则公共语言运行库使用已经加载的__程序集。在命名组成应用程序的程序集时,这可能会产生影响。有关命名程序集的详细信息,请参阅http://msdn.microsoft.com/en-us/library/k8xx4k69。
与这个问题没有直接关系,但也很有用:
如果以前对程序集的请求失败,则对程序集的后续请求将立即失败,而无需尝试加载程序集。从.NET框架版本2.0开始,缓存程序集绑定失败,并使用缓存的信息来确定是否尝试加载程序集。
https://stackoverflow.com/questions/12261447
复制相似问题