[英]Instantiate class based on interface string name
我有一个实现这样的接口的类;
... = new Location<ICafe>();
... = new Location<IBusiness>();
etc
如果我想扩展我需要编辑代码的Location
类型的数量。
有没有办法可以根据接口的字符串名称实例化类?
所以我会从数据库中获取Cafe或Business,并且我想使用接口的字符串名称来实例化上述内容。
编辑
我应该注意,我稍后会在代码中使用ICafe,IBusiness等来确定这是什么类型的项目以及在屏幕上显示什么。
是的,反射会让你这样做,但会有几个步骤:
获取与名称对应的System.Type
,例如ifaceType = Type.GetType(string)
获取与泛型类型模板对应的System.Type
,从任何参数集开始,例如genericType = typeof (Location<ICafe>).GetGenericTypeDefinition()
在我看来,你可能会因为更加抽象而受益。 有什么理由你不能有一个称为的超接口:
interface IAbstractLocation
然后,使用适当的接口创建具体类,但是使用从AbstractLocation类型继承的接口:
interface ICafe : IAbstractLocation
interface IBusiness : IAbstractLocation
那你就有1种类型:
...Location<IAbstractLocation>();
哪个应该处理您可能添加的从IAbstractLocation接口继承的任何新类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.