关于反射的一些问题,请教高手!
我想实现动态的插件发现,就是放在plugin目录中的动态库能够由框架程序自动发现并显示,但是我发现如果没有实例化的就无法使用GetProperty取得该动态库中预先定义的属性值,不知道各位有什么办法解决。
重申一下:我在这段程序中是不能实例化该动态库中的类的。谢谢
string AddInsDir = string.Format( "{0}\\Plugin\\ ",Application.StartupPath);
string[] assemblies = Directory.GetFiles(AddInsDir, "*.dll ");
foreach (string assemblyFile in assemblies)
{
Assembly theAssembly = Assembly.LoadFrom(assemblyFile);
Type[] types = theAssembly.GetTypes();
foreach(Type t in types)
{
PropertyInfo p = t.GetProperty( "TheNameOfComponent ");
取得后进行相关操作!
}
}
------解决方案--------------------本人愚见,仅供参考!
/// <summary>
/// 直接从当前组件中动态的创建一个类的实例
/// </summary>
/// <typeparam name= "T "> </typeparam>
/// <param name= "classFullName "> 类的全名含namespace,格式类似于ClassNamespace.ClassName </param>
/// <returns> </returns>
public T CreateInstance <T> (string classFullName)
{
Type classType;
try
{
classType = Type.GetType(classFullName, true, false);
T instanceName = (T)Activator.CreateInstance(classType);
return instanceName;
}
catch (TypeLoadException)
{
throw new TypeLoadException( "无法从给定的类名获得类型,检查类型名是否有误 ");
}
catch (Exception ex)
{
throw new Exception( "创建对象失败 ",ex);
}
finally
{
classType = null;
}
}
------解决方案--------------------还有这个
ms-
help://MS.MSDNQTR.2003FEB.2052/cpguide/html/cpconextendingmetadatausingattributes.htm