質問

このコードを使用して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がコントロール内で呼び出された場合にのみアクティブドキュメントを正しく返すことです。その方法をプロキシクラスに移動すると、GetServiceには定義がありません。この方法はcomponentmodel.componentからのものであることを検索します。そのため、プロキシクラスはコンポーネントから派生しました。すべてがOKをコンパイルしますが、常にアクティブなドキュメントを要求するときは、例外が発生します。私は、GetService()メソッドの仕組みをよく理解していないことです。これを手伝ってください。

役に立ちましたか?

解決

component.getServiceは、コンポーネントのサイトプロパティに割り当てられたISITEインスタンスでiServiceProvider.getServiceを呼び出します(1つがあると仮定)。プロキシインスタンスをコンポーネントから継承する必要はありませんが、Isite/iserviceProviderにアクセスできるようにする必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top