我試圖環繞Awesomium
,並使其代碼的其餘部分儘可能接近NET的WebBrowser
,因爲這適用於已使用WebBrowser
的現有應用程序。將終結器中的底層對象置於不可變對象中
在這種庫中,有一個稱爲JSObject
表示javascript對象類。例如,您可以通過調用WebView
類的ExecuteJavascriptWithResult
方法獲得其中的一個。如果你把它叫做myWebView.ExecuteJavascriptWithResult("document", string.Empty).ToObject()
,那麼你會得到代表文檔的JSObject
。
我正在寫一個不可變類(它的唯一領域是readonly JSObject
對象)稱爲JSObjectWrap
是環繞JSObject
,我想作爲該會效仿.NET類如HtmlElement
和HtmlDocument
其他類的基類使用。現在,這些類不執行Dispose
,但JSObject
呢。我首先想到的是在我的JSObjectWrap
的終結器(而不是JSObjectWrap
實現Dispose
)中調用底層的JSObject
的Dispose
方法,以便我的代碼的其餘部分可以保持原樣(而不必添加using
's無處不在,並確保每個JSObjectWrap
正在妥善處置)。
但是我剛纔意識到如果兩個以上的JSObjectWrap
有相同的底層JSObject
並且其中一個被敲定,這會弄亂其他JSObjectWrap
。所以,現在我想也許我應該保持JSObjects
靜態Dictionary
並保持多少他們每個人都被一個JSObjectWrap
引用計數,但這聽起來很凌亂,我認爲可能會導致重大的性能問題。
由於這聽起來好像是一個常見的模式我不知道其他人有更好的主意。
哎,去容易在背打勾。 –