0

私はこのコードでUsercontrolにメソッドを持っています

        public bool GetActiveDocument(ref EnvDTE.Document doc)
    {
        try
        {
            var dte = (DTE2)GetService(typeof(SDTE));
            doc = dte.ActiveDocument;
            if (doc == null)
            {
                MessageBox.Show("There isn't any file open in the Code Editor");
                return false;
            }
            else return true;
        }
        catch (Exception)
        {
            MessageBox.Show("There was a problem getting the actual file, verify if it is open");
            return false;
        }
    }

このメソッドを、Visual Studio とアプリケーションの間の仲介者として機能する「プロキシ」クラスに移動したいと考えています。問題は、GetService がコントロール内で呼び出された場合にのみ、アクティブなドキュメントを正しく返すことです。そのメソッドを Proxy クラスに移動すると、GetService に定義がありません。このメソッドは ComponentModel.Component から来ていると検索したので、Proxy クラスを Component から派生させました。すべてが正常にコンパイルされますが、常にアクティブなドキュメントを要求すると例外が発生します。GetService() メソッドの仕組みがよくわかりません。これを手伝ってください。

4

1 に答える 1

1

Component.GetServiceは、コンポーネントのSiteプロパティに割り当てられたISiteインスタンスでIServiceProvider.GetServiceを呼び出します(コンポーネントが存在する場合)。プロキシインスタンスをコンポーネントから継承させる必要はありませんが、ISite/IServiceProviderへのアクセスを許可する必要があります。

于 2011-01-14T15:06:46.333 に答える