如何在.NET中运行时检测类的存在?
是否可以在 .NET 应用程序 (C#) 中有条件地检测类是否在运行时定义?
示例实现 - 假设您想基于配置选项创建一个类对象?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
是否可以在 .NET 应用程序 (C#) 中有条件地检测类是否在运行时定义?
示例实现 - 假设您想基于配置选项创建一个类对象?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(4)
对于你问题的第二部分:-
我不知道你为什么要这么做。但是,如果您的类实现了一个接口,并且您想根据配置文件动态创建这些类的对象,我认为您可以查看Unity IoC容器。如果它适合您的场景,它真的很酷并且非常易于使用。有关如何执行此操作的示例是 此处。
For the second part of your question :-
I dont know why you want to do that. However, If your classes implement an interface and you want to dynamically create objects of those classes based on configuration files, I think you can look at Unity IoC container. Its really cool and very easy to use If it fits your scenario. An example on how to do that is here.
我已经做了类似的事情,从配置加载一个类并实例化它。在此示例中,我需要确保配置中指定的类继承自名为 NinjectModule 的类,但我想您已经明白了。
I've done something like that, load a class from the Config and instantiate it. In this example, I needed to make sure the class specified in the config inherited from a class called NinjectModule, but I think you get the idea.
Activator.CreateInstance 可能符合要求:
http://msdn。 microsoft.com/en-us/library/system.activator.createinstance.aspx
当然,如果您无法实例化该类,它会抛出异常,而这并不完全是与该类是否“存在”相同。但是,如果您无法实例化它并且您不想只调用静态成员,那么它应该可以满足您的要求。
您可能正在寻找具有字符串参数的重载,第一个参数应该是程序集的名称,第二个参数是类的名称(完全命名空间限定)。
Activator.CreateInstance may fit the bill:
http://msdn.microsoft.com/en-us/library/system.activator.createinstance.aspx
Of course, it throws an exception if you can't instantiate the class, which isn't exactly the same thing as whether the class "exists". But if you can't instantiate it and you aren't looking to just call static members, it should do the trick for you.
You're probably looking for the overload that has string parameters, the first argument should be the name of the assembly, the second being the name of the class (fully namespace-qualified).
我的静态函数版本:
My static function versión: