我一直在爲創建目的而創建自己的IoC容器。在問了一些有關它們的問題後,我發現創建一個工廠來「解決」這些對象是最好的解決方案(see third solution here)。用戶Krzysztof Koźmic表明,溫莎城堡實際上可以爲你實現這一點。在沒有創建實現的情況下實現接口(動態代理?)
我一直在讀清楚CW的來源。我知道Resolve何時被調用,它「返回接口」。這個接口如何「截取」調用(因爲後面沒有實現)並將其稱爲自己的方法?
我知道這裏顯然有一些反思技巧,這真是太神奇了。我完全不知道「攔截」是如何完成的。我嘗試在git上冒險嘗試兔子洞,但我迷路了。如果任何人都能指出我正確的方向,那將非常感激。
此外 - 不會創建一個類型的工廠具有對調用代碼內的容器的依賴?在ASP.NET MVC術語中,這就是我所認爲的。
編輯:找到Reflection.Emit ...這可能是什麼用?
EDIT2:我越看越這個,自動創建工廠聽起來越複雜。我可能最終只是堅持重複的代碼。
感謝您的評論。我正在嘗試*使用*「嘲笑」我嘗試製作的IoC容器。溫莎城堡使用某種技術來創建一個實現指定界面的「類型工廠」。如果您閱讀我從Krzysztof發佈的鏈接,您會明白我的意思。我不想使用第三方庫,因爲這些都是爲了我自己的學習。你有沒有關於課堂生成的任何資源?編輯:我知道我不需要*使用IL,我只是好奇它是如何完成的。謝謝! :) – TheCloudlessSky 2010-07-05 15:26:15
謝謝你。我要開始閱讀。我可能不會實現這個功能,因爲它看起來非常極端。但是,我要去看看這個,因爲它非常有趣。謝謝! – TheCloudlessSky 2010-07-05 15:39:39
@ TheCloudlessSky,IL很有趣,因爲你可以用它做一些非常強大的事情。但是它的確需要很多工作,而且Emit方法是非常自然的(它們不提供任何包含正確參數的檢查,因此很容易錯誤地創建IL代碼,而這些代碼在運行時無法驗證或爆炸。 )如果你使用它,只要記住peverify.exe是你的朋友。 – 2010-07-05 15:44:52