目前,我正在使用反射在程序集中搜索实现接口的类,然后检查这些类的名称以查看它是否与搜索到的类相匹配。
我的下一个任务是向此代码添加一种在目录中搜索 DLL 文件的方法,我唯一的提示是我可以使用“System.Environment.CurrentDirectory”。我还需要考虑到并非所有 DLL 都包含 .net 程序集这一事实。
有人可以推荐从哪里开始吗?
IInstruction instruction = null;
string currentDir = Environment.CurrentDirectory;
var query = from type in Assembly.GetExecutingAssembly().GetTypes()
where type.IsClass && type.GetInterfaces().Contains(typeof(IInstruction))
select type;
foreach (var item in query)
{
if (opcode.Equals(item.Name, StringComparison.InvariantCultureIgnoreCase))
{
instruction = Activator.CreateInstance(item) as IInstruction;
return instruction;
}
}
Run Code Online (Sandbox Code Playgroud)
操作码是我正在搜索的类的名称。
像这样的事情应该可以帮助您开始,它将尝试加载当前目录中的所有 .dll 文件并返回它们包含的所有类型,这些类型的短名称包含在opcode;
private static IEnumerable<Type> GetMatchingTypes(string opcode)
{
var files = Directory.GetFiles(Environment.CurrentDirectory, "*.dll");
foreach (var file in files)
{
Type[] types;
try
{
types = Assembly.LoadFrom(file).GetTypes();
}
catch
{
continue; // Can't load as .NET assembly, so ignore
}
var interestingTypes =
types.Where(t => t.IsClass &&
t.GetInterfaces().Contains(typeof (IInstruction)) &&
t.Name.Equals(opcode, StringComparison.InvariantCultureIgnoreCase));
foreach (var type in interestingTypes)
yield return type;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4566 次 |
| 最近记录: |