由于我工作的非常大的金融机构的政治,我无法使用Castle Project的ActiveRecord实现,但是像我自己实现的模式一样。这是完整的,现在管理层正在寻找一个GUI工具来浏览所有的activerecord类,搜索实例和管理数据。
为此,我正在构建一个“浏览器”,它遍历引用项目中的所有类,如果它们是从一个参数化的基类(“ActiveInstanceBase”)派生的,那么可以将它们用于检查和修改一个ASP.net数据网格。
我的第一步是弄清楚如何遍历当前项目中的所有引用(使用此工具的开发人员将其dll作为引用添加到项目中)并识别ActiveInstance类以填充下拉列表要检查的类型。
如何获取当前项目的所有参考列表?谷歌在一些查询结果的第一页上没有为我提供任何帮助。我有很多关于编写Visual Studio插件的东西,但没有用于运行时检查。
如果基类采用Type参数,如何在运行时确定派生类型的基类?
if(t.IsSubclassOf(typeof(ActiveInstance.ActiveInstanceBase))) {}
不是正确的语法,我在运行时无法知道。
我也被迫使用IE6,所以请原谅这篇文章的格式不是很好。非常感谢提前!
答案 0 :(得分:1)
1)如何获取项目中引用的程序集
Assembly ourAssembly = Assembly.GetEntryAssembly();
AssemblyName[] refs = ourAssembly.GetReferencedAssemblies();
2)使用Type。IsSubclassOf()或Type。GetInterface()
Type theType = typeof(ActiveInstance.ActiveInstanceBase<>);
foreach(Type type in assembly.GetTypes())
{
if (type.IsSubclassOf(theType))
{ ... }
}
那些应该适合你...
答案 1 :(得分:0)
如果你有下载第三方软件的政治规则,这可能不起作用,但我使用.net Reflector。它将为您提供参考并反编译代码以供审阅。