Kapsanan bir genel tür elde etme konusunda bir sorun yaşıyorum (muhtemelen C# generics hakkında bilgi sahibi olmadığım için). Kullanımdaki açık validator arabirimi dışında aşağıdakilere oldukça benzeyen birkaç yönteme sahibim. diyor ve tüm baz türleri ve belirli bir türden arayüzleri toplar olarakBir genel tür kapatılmamış türden bir genel türünü kapatılıyor
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;
}
yöntem GetRecursiveBaseTypesAndInterfaces yapar. Sonuçta yaptığım şey, açık validator arayüzünün kapatılmamış tipini almak ve orijinal tip T'nin temel sınıflarının ve arayüzlerinin her birinin kapalı olarak tipini almaktır. Bu harika çalışıyor, ancak benim kod temizlemek ve T herhangi doğrulayıcı IValidator (feryat) uzatacaktır bilerek yukarıda
daha genel bir formda
public interface IDeleteValidator<in T> : IValidator<T> {}
Benim bu başarmak istiyorum gibi yukarıdaki yöntemin genel bir sürümü de tamamlanmamış girişimi görünür:
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;
}
nasıl unclosedType define (veya yöntemi yeniden) ile aynı işi yapmak için yoksa veya
GetValidators<Whatever, IDeleteValidator<Whatever>>();
Veya bir çağrıda bulunan iginal yöntem yeterli olacaktır aşağıdaki gibi bir çağrısı olarak daha çok benim yöntemini geliştirmek için mümkün olurdu?
GetValidators<IDeleteValidator<Whatever>>();
Sorun tam olarak çözüldü. Teşekkürler. – rheone