[英]How to use reflection and abstract objects to dynamically load classes?
我正在構建一個協議處理程序。 該協議可能支持一組未知的請求類型,我將有一個實現每種請求類型的類。 這些請求處理程序類將擴展基本處理程序類。 我正在嘗試構建系統,以便為了支持新的請求類型,我需要做的就是為此添加一個類並重新編譯/部署/重新啟動服務。
所以我有這樣的事情:
foreach (Type classType in protocolAssembly.GetTypes())
{
if (classType.BaseType == typeof(ProtocolRequestHandler))
{
if (supportedRequestsMap.Contains(classType.Method))
{
// error: that method is already implemented!
}
supportedRequestsMap.Add(classType.Method, typeof(classType));
}
}
只要聲明了它處理的請求方法,就會在服務重新啟動時選擇添加新類。
如何通過基類ProtocolRequestHandler在編譯時強制執行屬性Method ? 我不想使用方法類型為“Null”或“Unknown”,或拋出異常,我不想在擴展類的名稱中固有地指定支持的協議請求類型(我想調用我喜歡的課程。
有什么方法可以強制一個屬性在繼承類中設置其值?
有沒有更清潔的方式我可以做這種動態加載? 我應該使用屬性來確定繼承類的受支持方法嗎?
您應該依賴接口作為插件應該實現的方法的契約。
在這里可以找到一個(有點舊,但仍然非常相關)很好的教程
如果您使用的是基類,為什么不將所需的方法創建為抽象方法(如果可能,則為虛擬並指定默認實現)。 這將確保您的繼承類中存在該方法。 我相信如果您正在反思並編寫自己的協議處理程序,您可能已經知道了這一點,但我不確定是否有更好的方法來獲得您想要的內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.