使用"Getting all types that implement an interface with C# 3.0"进行错误处理



我在类库中有一个方法,它扫描所有加载的程序集,以查找实现某个接口的类型,而不是获取实现某个接口的所有类型。

var type = typeof(IMyInteraface);
var types = AppDomain.CurrentDomain.GetAssemblies().ToList()
    .SelectMany(s => s.GetTypes())
    .Where(p => type.IsAssignableFrom(p));

在将类库安装到项目中时,我偶尔会遇到这样的FileNotFoundException:

无法加载文件或程序集'AAA.BBB '。CCC, Version=1.2.3.4, Culture=neutral, PublicKeyToken=abcdef0123456789a'或其依赖项之一。系统找不到指定的文件

我想重写LINQ查询成一些更安全的错误。出于我的目的,如果不能加载程序集,那么我不必担心尝试加载属于它的任何类型。这是如何做到的呢?

您可以将LINQ分解为嵌套的foreach循环,并添加许多try-catch块,并忽略任何给您错误的汇编和任何类型。

var interfaceType = typeof(IMyInterface);
var types = new List<Type>();
foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) {
    try {
        foreach (var type in assembly.GetTypes()) {
            try {
                if (interfaceType.IsAssignableFrom(type))
                    types.Add(type);
            } catch (FileNotFoundException) {}
        }
    } catch (FileNotFoundException) {}
}

相关内容

  • 没有找到相关文章

最新更新