关于c#:获取继承特定接口的类列表?

Getting a list of classes that inherit a specific interface?

本问题已经有最佳答案,请猛点这里访问。

我正在我的项目中使用依赖注入,我想知道仅仅注册继承某个接口的30多个类是否更容易,使用for each,这样它就可以动态工作。

我在谷歌上查过,所以,RJ,YHA和更多的Q&A网站都没有帮助。它只是解释您是否已经有了它们类的集合,并且没有一个类只向您展示如何从一个接口完成它。

例如,我需要一个Class1、Class2和Class3的列表,以及继承IClass的任何其他clase。

1
2
3
class Class1 : IClass {}
class Class2 : IClass {}
class Class3 : IClass {}

如果我以后再申报这些,它们也会被找到。

1
2
3
class Class4 : IClass {}
class Class5 : IClass {}
class Class6 : IClass {}


DI容器通常为此目的提供一些功能。例如,使用autopac,可以使用如下程序集扫描:

1
2
3
4
5
6
var dataAccess = Assembly.GetExecutingAssembly();

builder
   .RegisterAssemblyTypes(dataAccess)
   .Where(t => t.Name.EndsWith("Repository"))
   .AsImplementedInterfaces();

此示例演示如何在执行程序集时注册所有存储库。因为您的组件实现了相同的接口,我想您可以找到一些命名模式来注册它们。