我有这些课程:
public abstract class BaseClass{}
public class CustomerService : BaseClass<Customer>{}
public class ProductService : BaseClass<Product>{}
public class UserService : BaseClass<User>{}
在运行时我有这种类型:entity.GetType()
,它将返回泛型类型:Customer
例如。
如果我在运行时输入CustomerService
,如何获得Customer
的类型?
它们都在同一名称空间中
感谢
答案 0 :(得分:3)
如果您只是在寻找直接基类型为相关BaseClass<T>
的类,则可以使用以下代码:
var targetBaseType = typeof(BaseClass<>).MakeGenericType(entityType);
var type = typeof(BaseClass<>).Assembly.GetTypes()
.Single(t => t.BaseType == targetBaseType);
为避免每次都进行线性搜索,您可能需要创建一个Dictionary<Type, Type>
,其中键是实体类型,值是服务类型。您可以使用反射进行设置,也可以手动创建。然后它真的简单:
var type = serviceTypeDictionary[entityType];