オブジェクトアクセスの基礎
エクステンション開発でよく利用するオブジェクトやプロパティと、それらへのアクセス方法について説明します。
オブジェクト構造
グローバル、ユーザーインタフェース、エディタ、ワークスペース・プロジェクト、モデル、プロファイルの6つの機能エリアの代表的なオブジェクトと、それらの関係を示した図です。 詳しくは、API仕様を参照して下さい。
コマンドやイベントハンドラでのアクセス
コマンドやイベントではICommandContextオブジェクトやIEventContextオブジェクトのAppプロパティを用いてアプリケーションの情報にアクセスできます。
protected void SomeCommand(ICommandContext c, ICommandParams p)
{
    // アプリケーションを取得します
    var app = c.App;
    
    // ワークスペース(プロジェクトファイル操作)を取得します
    var workspace = c.App.Workspace;
    // 現在のプロジェクトを取得します
    var currentProject = workspace.CurrentProject;
    // 現在のモデルを取得します
    var currentModel = workspace.CurrentModel;
    // メタモデルを取得します
    var metamodels = currentProject.Profile.Metamodels;
    // ファイルを開くダイアログなどの標準UIを取得します
    var ui = app.Window.UI;
}
次のように実装できます。
public void SomeCommand(ICommandContext c, ICommandParams p)
{
    // プロジェクトファイルのパスを取得します
    var projectFilePath = c.App.Workspace.CurrentProject.ModelUnit.AbsolutePath;
    c.App.Output.WriteLine("sample", projectFilePath);
}
エクステンション(IExtension)でのアクセス
エクステンションのActivate/Deactivate実装では、IContextオブジェクトのAppプロパティでアプリケーションオブジェクトにアクセスできます。
public  class MyExtension : IExtension
{
    public void Activate(IContext context)
    {
        // アプリケーションを取得します
        IApplication app = context.App;
        // ワークスペース(プロジェクトファイル操作)を取得します
        var workspace = context.App.Workspace;
        //...
    }
    public void Deactivate(IContext context)
    {
    }
}
