2014-01-30 30 views
0

想象一下MainLibrary.dlldynamically loading other helper DLLs。這是對我們的設計更改,爲此,我們需要通過註冊AssemblyResolve回調來引導過程。當你的DLL被加載時事件/檢測?

當有單一入口點時(例如:Main()),這很容易實現,但在我們的案例中,MainLibrary.dll有多個入口點。我們希望避免引入明確的Init()調用,因爲這會打破現有的客戶端庫API(「」)在調用DoSomeWork()「)之前,您現在必須調用Init()。

那麼有沒有一種方法讓圖書館知道它何時被加載或即將被使用?通過這種方式,我們可以鎖定在那裏執行我們的註冊,在動態加載更改之前維護客戶端庫接口。

+0

['AppDomain.AssemblyLoad'](http://msdn.microsoft.com/en-us/library/system.appdomain.assemblyload(v = vs.110).aspx)將程序集加載到記憶第一次。所以你應該可以在事件處理程序中添加自舉代碼。 – Xenolightning

+1

@Xenolightning - 我想'AssemblyLoad'已經太遲了,因爲DeepSpace101想從程序集中知道它尚未加載,因此無法聽到任何「加載」事件。 –

回答

0

程序集沒有內置的方式知道它何時被加載(不像DllMain在加載時調用的本地代碼中)。

如果無法使用默認加載規則加載其他二進制文件,您需要重新組織代碼。

便宜的方法是提供(甚至可能是自動生成的)一層接口/對象封裝器實現,它只會在調用實際的API之前強制加載依賴關係。