カスタム属性を使用:
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
public class MenuItemAttribute : Attribute
{
}
ユーザーがメソッドをマークできるようにします。
public class Foo
{
[MenuItem]
public void Bar() {}
}
次に、メソッド ルックアップで、この属性のメタデータを調べます。
var methodInfos = myObject
.GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly)
.Where(_ => _.IsDefined(typeof(MenuItemAttribute)));
ユーザーがメニュー パスを定義できるようにする必要がある場合は、次のようなカスタム パラメータで属性を拡張します。
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
public class MenuItemAttribute : Attribute
{
public MenuItemAttribute(string menuPath)
{
MenuPath = menuPath;
}
public string MenuPath { get; }
}
もう 1 つのオプションは、プラグインを作成するための独自の方法を捨てて、箱から出してすぐに使用できるもの、たとえばMEFを使用することです。