是否有任何好的算法來確定實例化的「最佳」類型以完成請求?.NET通用類型 - 尋找最具體的類型
例如說我有以下類:
public interface ISometype<T> {}
public class SomeTypeImpl<T>:ISometype<T> {}
public class SomeSpecificTypeImpl<T>:ISometype<T> where T: ISpecificSpecifier {}
public interface ISpecificSpecifier { }
假設主叫方希望此接口的最好實現類型。我可以實現這樣的這種特殊的方法:
:public Type GetBestImplementationType(Type genericParam) {
try {
return typeof(SomeSpecificTypeImpl<>).MakeGenericType(genericParam);
} catch(ArgumentException) {}
return typeof(SomeTypeImpl<>).MakeGenericType(genericParam);
}
雖然實施這一項目,因爲我更關心的是一般化其中可能有不止一個潛在的具體實施以及多個通用參數這個特殊的情況下工作
public Type GetBestImplementationType(Type[] genericParams, Type[] potentialTypes) {
foreach(var t in potentialTypes) {
try {
return t.MakeGenericType(genericParams);
} catch(ArgumentException) {}
}
throw new Exception("unable to find specific implementation type");
}
這應該工作給potentialTypes數組提供從大多數到最不特定的順序。因此,對於答案,要麼是實現這種方法的算法(或者足夠類似的東西),要麼是一種實現我可以在這種方法中使用的算法的算法。
[警告:代碼未經測試,可能存在語法/邏輯錯誤]
這聽起來對我來說就像你想要一個IoC容器...... – 2009-10-19 19:17:13
其實,我已經有一個:溫莎。這個問題與我今天早些時候在用戶列表中提出的關於選擇最佳實現類型的文章相關。我強烈懷疑,如果這個算法寫在某個地方,那麼它已經存在於其中一個IoC容器中。 – 2009-10-19 19:24:57
藉助Windsor和流利的註冊API,您可以爲特定情況指定ServiceOverrides。 http://using.castleproject.org/display/IoC/Fluent+Registration+API – 2009-10-19 20:38:22