これは、すでにを使用している既存のアプリケーション用であるため、ラップアラウンドしてAwesomium、コードの残りの部分をNETにできるだけ近づけようとしています。WebBrowserWebBrowser
このライブラリにはJSObject、javascriptオブジェクトを表すというクラスがあります。たとえば、クラスのExecuteJavascriptWithResultメソッドを呼び出すことで、このいずれかを取得できます。のようにWebView呼び出すと、ドキュメントを表すが表示されます。myWebView.ExecuteJavascriptWithResult("document", string.Empty).ToObject()JSObject
と呼ばれる不変のクラス(フィールドはreadonly JSObjectオブジェクトのみ)を作成しています。このクラスJSObjectWrapをラップアラウンドして、やJSObjectなどの.NETクラスをエミュレートする他のクラスの基本クラスとして使用します。現在、これらのクラスは実装していませんが、実装しています。私が最初に考えたのは、(実装する代わりに)ファイナライザーで基になる'メソッドを呼び出して、コードの残りの部分を(どこにでも追加して、すべてが適切に処分されている)。HtmlElementHtmlDocumentDisposeJSObjectJSObjectDisposeJSObjectWrapJSObjectWrapDisposeusingJSObjectWrap
しかし、2つ以上がJSObjectWrap同じ基礎JSObjectを持ち、そのうちの1つが完成すると、もう1つが台無しになることに気づきましたJSObjectWrap。だから今、私は多分私がそれらのそれぞれが参照されているものの静的な数を数えDictionary続けるべきだと思っていますが、これは厄介に聞こえ、大きなパフォーマンスの問題を引き起こす可能性があると思います。JSObjectsJSObjectWrap
これは私には一般的なパターンのように聞こえるので、他の誰かがより良いアイデアを持っているのだろうかと思います。