採取以下C#代碼我可以發射在「臨時」組件
namespace lib.foo {
public class A {
public A (int x) {}
public int GetNumber() { return calculateNumber(); }
private int calculateNumber() { return lib.bar.B.ProduceNumber(); }
public void irrelevantMethod() {}
}
}
namespace lib.bar {
public class B {
public static int ProduceNumber() { return something; }
public void IrrelevantMethod() {}
}
}
欲產生含有的lib.foo.A.GetNumber()
功能性的組裝,儲存,和後來動態加載它,然後執行它的現有實現方式中。
爲了達到這個目的,我需要一個可以跟蹤所有需要的依賴關係(下面列出)的程序,並將它們 - 包括它們的實現(!) - 在一個程序集中存儲。
* lib.foo.A(int)
* lib.foo.A.getNumber()
* lib.foo.A.calculateNumer()
* lib.bar.B.ProduceNumber()
可以這樣做嗎?怎麼樣?
如果有人想知道,我想建立一個系統,機器A告訴機器B(使用WCF)要做什麼。由於序列化的代表是不可能的,我的計劃是
1)傳輸從機器A到B的組件,
2)負載機器B中的組件,
3 )讓機器A指示機器B調用在這個新程序集中實現的所需方法。
保持源代碼的形式全部「可移動代碼」,這樣你就不需要通過反射來「恢復」了它,而且你可以運輸到任何地方編譯你喜歡... – Yahia
那麼爲什麼不使用可卸載的插件?所以機器B總是可以加載/卸載它們,你需要的只是一個插件主機,它能夠做到這些(通過名稱調用插件的方法)。 –
這聽起來很合理:將整個程序集(及其依賴項)從機器A傳輸到B,將其加載到AppDomain中,並按名稱調用方法。 – derabbink