22

IoC コンテナー登録プロセス用の流暢なインターフェイスがあり、これには登録を構築するために使用されるいくつかのクラスが含まれています。

たとえば、私はこれを行うことができます:

builder.Register<IFoo>().From.ConcreteType<Foo>();

ただし、ドットの後の各ステップでは、Object クラスの 4 つの標準メソッド、GetHashCode、Equals、GetType、および ToString を示す IntelliSense がポップアップ表示されます。

いくつかのクラスでこれらのメソッドをオーバーライドして、それぞれにEditorBrowsableAttribute属性をアタッチしようとしましたが、それでも表示されます。それらを隠す方法はありませんか?

クラス自体からそれらを隠そうとしているのではなく、単にインテリセンスから隠していることに注意してください。

基本的に、私はこれが欲しい:

                         +---------------+
builder.Register<IFoo>().|As             |
                         |By             |
                         |Equals         | <-- remove this
                         |From           |
                         |GetHashCode    | <-- and this
                         |GetType        | <-- as well as this
                         |ToString       | <-- and finally this
                         +---------------+

から返されたクラスで試したのは次のRegister<T>とおりです。

[EditorBrowsable(EditorBrowsableState.Never)]
public override Boolean Equals(Object obj)
{
    return base.Equals(obj);
}

[EditorBrowsable(EditorBrowsableState.Never)]
public override Int32 GetHashCode()
{
    return base.GetHashCode();
}

[EditorBrowsable(EditorBrowsableState.Never)]
public override String ToString()
{
    return base.ToString();
}

これは明らかに機能しませんでした。他に試せることはありますか?

また、からオーバーライドされていない新しいメソッドを追加してObject、同じ属性をそれに適用しようとしましたが、それも表示されるため、属性が思ったとおりに機能していないことは明らかです。

同じアセンブリから物を隠さないというドキュメントのメモに気付きましたが、新しいプロジェクトを作成しようとしましたが、まだそこに表示されます。

4

2 に答える 2

22

わかりました、解決策を見つけました。それは部分的に私のせいで、部分的に不完全なドキュメントでした。

私の欠点は、正しいクラスのすべてのメソッドにタグを付けていなかったことですが、それを修正してもメソッドは表示されました。

ドキュメントのメモには次のように書かれています。

Visual C# では、EditorBrowsableAttribute は同じアセンブリ内のクラスのメンバーを抑制しません。

実際にあるはずです(私のものを強調してください):

Visual C# では、EditorBrowsableAttribute は、開いている同じソリューション内のクラスのメンバーを抑制しません。

適切なクラスのメソッドにタグを付け、完全な再構築を行い、ソリューション ファイルの外部に新しいプロジェクトを作成し、IoC プロジェクトからコンパイルされたファイルへのファイル参照を作成すると、見よ、メソッドが消えました。

他の誰かがこの問題を抱えている場合に備えて、質問を残します。

于 2009-09-24T19:57:30.100 に答える
18

スレッドによると、それは仕様によるものです。で装飾されたメソッド/プロパティEditorBrowsable(EditorBrowsableState.Never)は、参照されている別のアセンブリにあるクラスの一部である場合にのみ、インテリセンスから非表示になります。アセンブリは同じソリューションの一部であってはなりません。

于 2009-09-23T09:00:27.533 に答える