Dziś będzie o tym atrybucie i co za jego pomocą możemy uczynić.
Często debuggujemy nasze aplikacje i często używamy możliwości ‘podejrzenia’ co dana zmienna zawiera. Niestety w przypadku bardziej skomplikowanych typów to co oferuje nam domyślnie VS nie jest wystarczające.
Weźmy dla przykłady bitmapy. To co mamy domyślnie wygląda mniej więcej tak:
Pełno danych, ale tak naprawdę, nie mówią one mam tego najważniejszego. Jak ta bitmapa wygląda. O ile lepiej nam by się żyło, gdybyśmy mogli (oczywiście nadal zachowując możliwość wyświetlenia wszystkich właściwości i zmiennych) zobaczyć taki obraz:
Wbrew pozorom nie jest to wcale takie trudne. Wszystko dzięki atrybutowi DebuggerVisualizer oraz klasie DialogDebuggerVisualizer. Ale po kolei:
Żeby stworzyć taki Visualizer, wystarczy, że utworzymy projekt typu ClassLibrary. A następnie dziedziczmy naszą klasę z DialogDebuggerVisualizer:
public class BitmapVisualizerDialog : DialogDebuggerVisualizer
{
}
Klasa ta jest abstrakcyjna i wymaga od nas napisania ciała dla metody Show. W niej robimy to co chcemy.
var item = objectProvider.GetObject();
var i = (Image) item;
var form = new CompareBitmapDialog {Image = i};
form.ShowDialog();
Gdzie CompareBitmapDialog to zwykła forma z PictureBox’em. Pominę to jak to zrobić. Myślę, że każdy będzie to potrafił.
Na koniec musimy powiedzieć jeszcze jakiego typu/-ów dotyczy ten Vizualizer. Robimy to, wspomnianym w tytule atrybutem, DebuggerVisualizer.
[assembly: DebuggerVisualizer( typeof(BitmapVisualizerDialog),
Target = typeof(Bitmap))]
[assembly: DebuggerVisualizer( typeof(BitmapVisualizerDialog),
Target = typeof(Image))]
W zasadzie już wszystko. Pozostał jeszcze deployment. Sprowadza się on do skopiowania naszego wynikowego pliku .dll do odpowiedniego folderu.
lub
My Documents\Visual Studio\Visualizers
w zależności czy chcemy, aby dostęp mieli wszyscy czy tylko dany użytkownik. Po restarcie Visual Studio przy Bitmapach pojawi się mała lupka:
Klikając na nią uruchamiamy nasz Vizualizer.
Founder of Octal Solutions a .NET software house.
Passionate dev, blogger, occasionally speaker, one of the leaders of Wroc.NET user group. Microsoft MVP. Podcaster – Ostrapila.pl