激活器和静态类
我正在考虑使用 Activator 类来访问程序集中的资源,否则我会为其创建循环引用(依赖项注入)。 我之前已经使用需要引用的普通类完成了此操作,但我的问题是:我可以使用 Activator 来访问静态类吗?
让我困惑的部分是激活器返回给您对象的实例,而静态类没有实例。 这可能吗?
I'm tossing around the idea of using the Activator class in order to get access to resources in an assembly that I would otherwise create a circular reference for (dependency injection). I've done it before with vanilla classes that I needed a reference to, but my question is: can I use the Activator to get access to a static class?
The part that's tripping me up is that the Activator returns to you a instance of the object, whereas a static class has no instance. Is this possible?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
您不需要激活器来调用该方法。 您可以直接使用MethodInfo.Invoke。 第一个参数可以保留为空。
You do not need the Activator to call the method. You use MethodInfo.Invoke directly. The first parameter can be left null.
GvS 是正确的 - 这是用法示例:
GvS is correct - here is an example of the usage:
使用 MethodInfo.Invoke 的另一个示例
One more example using MethodInfo.Invoke
并不是静态类没有实例,而是它没有任何公共构造函数。 Activator 使用反射来创建实例,当你使用反射时,你可以调用任何你想要的东西,甚至是私有构造函数
It is not that static class has no instance, it's just it doesn't have any public constructors. Activator uses reflection to create instances, and when you use reflection you can call anything you want, even private constructors
如果您所说的“资源”实际上是嵌入在程序集中的资源,那么您始终可以手动提取它们(请参阅
Assembly.GetManifestResourceStream()
),而无需使用静态类(会有更多问题)因为使用它们的唯一方法就是纯粹通过反射)。Spring.NET 有一个很好的 IResource 抽象。
不,
Activator
不能用于“创建”静态类。If what you mean by saying "resources" is in fact resources embedded in the assembly, you can always extract them manually (see
Assembly.GetManifestResourceStream()
), without using static classes (there will be more problems with those since the only way you can use them is purely with reflection).Spring.NET has a nice IResource abstraction.
And no,
Activator
cannot be used to "create" static classes.