2014-08-29 38 views
1

我有這些類類型:在運行時如何獲得的繼承通用

public abstract class BaseClass{} 
public class CustomerService : BaseClass<Customer>{} 
public class ProductService : BaseClass<Product>{} 
public class UserService : BaseClass<User>{} 

我有這種類型的:entity.GetType()這將返回泛型類型:Customer例如。

如果我在運行時有Customer類型,如何獲得CustomerService的類型?
它們都在相同的命名空間。
感謝

回答

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]; 
+0

謝謝你,我沒有提及抱歉,但BaseClass的是抽象的,我不能離開它創建一個實例。 – SexyMF 2014-08-29 17:52:48

+0

@SexyMF:我從來沒有建議你這樣做... – 2014-08-29 17:53:31

+0

謝謝,我的壞!我想我錯誤地低聲說了你,你能編輯你的答案,以便我可以修復它嗎? – SexyMF 2014-08-29 18:02:10