日期:2014-05-18  浏览次数:20766 次

关于反射的一些问题,请教高手!
我想实现动态的插件发现,就是放在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