Mercurial のコマンド ライン クライアントをラップするクラス ライブラリがあります。
私の意図は、すべての組み込みコマンドのサポートを実装することですが、それらに加えて、そこにはたくさんの拡張機能があります.
したがって、他の人も私も拡張機能のサポートを追加できるという意味で、ライブラリを拡張可能にする必要があります。より一般的で典型的な拡張機能 (少なくとも Mercurial にバンドルされている拡張機能のかなりの数) のサポートを追加する予定ですが、それでも外部から拡張できるようにしたいと考えています。
現時点では、コマンドの構文は次のようになります。
Repo.Execute(new CommitCommand
{
Message = "Your commit message",
AddRemove = true,
});
ただし、これは、プログラマーが拡張機能が単に追加された部分であると感じない限り、拡張機能にはあまり適していません。
たとえば、手動でこれを行うことができるように、追加のコマンド ライン引数のパブリック コレクションを公開するとします。
var cmd = new CommitCommand
{
Message = "Your commit message",
AddRemove = true,
};
cmd.Arguments.Add("--my-commit-extension");
Repo.Execute(cmd);
オブジェクト初期化子の一部として設定できるように追加の拡張機能を追加する簡単な方法はないようです。
私は流暢なインターフェイス構文に追加するか、おそらく切り替えることを考えていました。この場合、次のように書くことができます。
Repo.Execute(new CommitCommand()
.Message("Your commit message")
.AddRemove()
.MyCommitExtension());
しかし、人々は流暢なインターフェースが好きではなく、おしゃべりになりすぎると感じています。
他にどのようなオプションがありますか?
私が欲しいもの、基本的に:
- 1 つの一般的な構文スタイル
- 組み込みのものの両方について
- 私のライブラリのユーザーによって追加された拡張機能と同様に
私のライブラリのユーザーは、新しいクラスと拡張メソッドを追加して Intellisense サポートを取得することでライブラリを拡張すると思いますが、オブジェクト初期化子で拡張メソッドを使用することはできません。それは私が望むものではありません。
どんなアイデアでも大歓迎です。