Posiadam płynny interfejs do procesu rejestracji kontenera IoC, a to zawiera klasy, które są używane do budowania rejestracji.Ukrywanie GetHashCode/Equals/ToString z płynnych klas interfejsu intellisense w Visual Studio dla C#?
Na przykład, można to zrobić:
builder.Register<IFoo>().From.ConcreteType<Foo>();
jednak, w każdym etapie po kropce IntelliSense wyskakuje pokazano cztery standardowe metody z klasy obiektów, GetHashCode równa, gettype i ToString.
Próbowałem przesłonić te metody w kilku klasach, dołączając do nich atrybuty EditorBrowsableAttribute, ale one nadal się wyświetlają. Czy nie ma sposobu, aby je ukryć?
Zauważ, że nie próbuję ukryć ich przed samą klasą, tylko z intellisense.
Zasadniczo chciałbym to:
+---------------+
builder.Register<IFoo>().|As |
|By |
|Equals | <-- remove this
|From |
|GetHashCode | <-- and this
|GetType | <-- as well as this
|ToString | <-- and finally this
+---------------+
Oto co próbowałem w klasie, który jest zwracany z 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();
}
To wyraźnie nie działa. Czy jest coś jeszcze, co mogę spróbować?
Próbowałem też dodać nową metodę, nie zastąpioną przez Object
, i stosując ten sam atrybut do tego, i to też pokazuje, więc wyraźnie atrybut nie robi tego, co myślałem, że to zrobi.
Zauważyłem notatkę z dokumentacji o tym, że nie ukrywam rzeczy z tego samego zespołu, ale próbowałem stworzyć nowy projekt i nadal się tam pojawiają.
Interesujące, dokumentacja EditorBrowsableState wyraźnie mówi * Na przykład silnik IntelliSense w Visual Studio nigdy nie pokazuje metod lub właściwości, które są oznaczone jako Never. * Próbowałem w małym projekcie testowym i otrzymałem takie same wyniki jak ty. Nawet jeśli sprawdzę "Ukryj zaawansowanych członków" i użyj 'EditorBrowsableState.Advanced', to element nadal będzie widoczny na liście. Dziwny. –
Znalazłem odpowiedź, będę edytować pytanie. –
Dobre znalezisko. Nigdy nie zawsze nie jest. –