我正在處理內存緩存應用程序,可以通過配置加載不同的緩存提供程序。我通過定義接口並使用插件模型來加載解析文件並加載與接口相匹配的類的程序集和類來完成此任務。我真的很想定義接口和一個允許任何對象被支持緩存存儲的通用類型(無論它是像Redis或NCache這樣的第三方緩存客戶端的包裝器,還是我自己的MemoryCache實現等)有一個工廠的最終目標,我可以指出一個dll包裝我的緩存方法。泛型,接口和激活器
當我使用Activator嘗試實例化插件時,我遇到的問題是有關泛型的錯誤。有沒有人知道一種方法來加載類與泛型到一個接口?
基本接口
public interface ICacheProvider<T>
{
T Get(string key);
bool Set(string key, T value, TimeSpan expiration);
}
工廠調用加載
public static ICacheProvider<T> GetCacheProvider(string path, string className, string configuration)
{
...
Assembly asm = Assembly.LoadFile(path);
Type type = asm.GetType(className);
return Activator.CreateInstance(type, new object[] { configuration }) as ICacheProvider<T>;
...
}
具體的實現使用普通對象是正確的。 請記住,這裏的示例代碼片段實際上簡化了他們的實際情況,以便爲我嘗試實現的一個快速示例。 我在初始化時定義類型的意圖是將特定的緩存實例限制爲某種類型。基本上,如果我說了一個用戶對象的緩存,我想限制某人向緩存實例添加其他內容的可能性。擴展方法並不是一個壞主意,儘管我覺得它不像明確指定緩存類型那樣具有錯誤抵抗力。 – JMorgan
@ anton-gogolev爲什麼在代碼實際上是你的時候使用'extension'方法? –