我想爲其他插件B/C可以使用的軟件創建插件A.現在棘手的部分是,我需要它遵循這些規則:使用可能未加載的庫
- B取決於A,它只會加載如果A存在。
- C使用A,但它應該在A不存在時起作用。
對於B很容易解決,它只會拋出一個錯誤,因爲A不存在。
現在對於C來說,我該如何做到這一點?我想使用能夠使用A,但如果A不存在,它不應該中斷。
我想爲其他插件B/C可以使用的軟件創建插件A.現在棘手的部分是,我需要它遵循這些規則:使用可能未加載的庫
對於B很容易解決,它只會拋出一個錯誤,因爲A不存在。
現在對於C來說,我該如何做到這一點?我想使用能夠使用A,但如果A不存在,它不應該中斷。
1例 - 在B的一流水平只是增加依賴於一個失敗B.類裝載
要允許失敗可選 - 包所有來電至A到方法和try/catch周圍調用這些方法所以JIT失敗可以被捕獲:
class C
{
// no references to A at class level
int MethodUsingA()
{
// use A here
}
int MethodTryingToUseA()
{
try
{
return MethodUingA(); // will throw loader error
// during JIT if A assembly is missing
}
catch // use specific exception, LoaderException?
{
return 42; // JIT of MethodUingA failed
}
}
如果你需要較大的類/方法號解決方案,您可以改爲考慮反射手動加載,並提供替代實現,如果加載失敗。
這實際上是爲我做的。謝謝! – SHiRKiT
你可以我敢肯定與反思實現這一目標。你能更具體地說明你想如何在'A'中使用類和代碼嗎? – stuartd