6
我遇到了一個問題(可能是由於我對C#泛型的熟悉程度不夠),因此無法獲取泛型類型。除了使用的明確的驗證器接口外,我有幾種方法看起來與以下類似。檢索關閉泛型的泛型類型的未封閉類型
public IEnumerable<IDeleteValidator<T>> GetDeleteValidators<T>()
{
var validatorList = new List<IDeleteValidator<T>>();
foreach (var type in GetRecursiveBaseTypesAndInterfaces(typeof(T)))
{
var validatorType = typeof(IDeleteValidator<>).MakeGenericType(type);
var validators = ObjectFactory
.GetAllInstances(validatorType).Cast<IDeleteValidator<T>>();
validatorList.AddRange(validators);
}
return validatorList;
}
的方法GetRecursiveBaseTypesAndInterfaces做,因爲它說,並收集所有的基本類型和給定類型的接口。所以我最終要做的是獲得未關閉的顯式驗證器接口類型,並在每個原始類型T的基類和接口上獲取它的類型爲closed。這個偉大的工程,但是我想清理我的代碼和一個更通用的形式大於上述
知道的T任何驗證將延長IValidator(如波紋管)
public interface IDeleteValidator<in T> : IValidator<T> {}
我做到這一點未完成企圖在上述方法的通用版本是這樣的:
public IEnumerable<TValidator> GetValidators<T, TValidator>()
where TValidator : IValidator<T>
{
var validatorList = new List<TValidator>();
foreach (var type in GetRecursiveBaseTypesAndInterfaces(typeof(T)))
{
var unclosedType = ???
var validatorType = typeof(unclosedType).MakeGenericType(type);
var validators = ObjectFactory
.GetAllInstances(validatorType).Cast<TValidator>();
validatorList.AddRange(validators);
}
return validatorList;
}
如何定義unclosedType(或重組方法)做相同的工作或一起
GetValidators<Whatever, IDeleteValidator<Whatever>>();
或通話iginal方法,纔有可能改進我的方法更何況像以下就足夠了一個電話?
GetValidators<IDeleteValidator<Whatever>>();
這正好解決了問題。謝謝。 – rheone