c# - 动态访问给定命名空间的类

标签 c# reflection clr

我正在编写一个将由许多类实现的接口(interface),并且我正在编写一个将保存这些实现的实例集合的类。每个类都有一个默认的构造函数。

那么,是否有一种简单的方法(例如使用某种反射)将每个实现类的实例放入集合中?除了手动执行之外,这很简单,是的,但是工作量很大并且容易出错(如果我在编写方法时错过了一个实现怎么办?如果出现新的实现而我忘记更新给定的方法怎么办?)。

所以,我想要的是能够迭代给定命名空间的所有类,或者可能遍历所有可用类的列表。然后,我的方法将通过反射简单地检查给定的类是否实现了给定的接口(interface),如果实现了,则将其放入集合中。

谢谢。

最佳答案

您需要调用Assembly.GetTypes()来获取程序集中的每个类,调用typeof(IMyInterface).IsAssignableFrom来检查实现该接口(interface)的类,然后调用 Activator.CreateInstanse 来实例化该类。

使用 LINQ:

typeof(IMyInterface).Assembly.GetTypes()
                             .Where<Type, bool>(typeof(IMyInterface).IsAssignableFrom)
                             .Select(t => Activator.CreateInstance(typeof(T)))
                             .ToArray()

关于c# - 动态访问给定命名空间的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2890443/

相关文章:

java - 无法将 java.lang.Integer 转换为 int

c# - .net 中使用的所有语言都具有相同的性能吗?

.net 运行时 - Silverlight 运行时 =?

c# - "Invalid Swift Support"在 Xamarin.iOS 中使用 native Swift 库

c# - 还有另一种方法可以检查用户所在的 .net 角色吗?

c# - Plinq、Cores 和 WithDegreeOfParallelism?

c# - 带有 Out 参数的 SQL Server CLR UDF - 这可能吗?

c# - Azure 上的 Google Analytics API

c# - 如何在进行重定向之前确保 Controller 和操作存在,asp.net mvc3

asp.net-mvc - 我可以从操作过滤器获取操作的返回类型吗?