L'SDK per Windows Home Server è ancora in versione preliminare, quindi il materiale a disposizione è molto poco (si limita al sito MSDN e al forum Microsoft) e gli esempi di codice sono praticamente inesistenti. Ho voluto comunque provare a realizzare un add-in che aggiunge un nuovo tab nella Windows Home Server Console:
Realizzare un add-in per la Console è abbastanza semplice, ma è importante rispettare le convenzioni sui nomi dei namespace, delle classi e degli assembly, altrimenti l'add-in non viene caricato:
- Il namespace dell'assembly deve essere Microsoft.HomeServer.HomeServerConsoleTab.NomePersonale (dove al posto di NomePersonale si può mettere il nome della propria estensione);
- L'add-in deve essere contenuto in una classe di nome HomeServerTabExtender;
- Il costruttore delle classe deve avere la seguente firma:
public HomeServerTabExtender(int width, int height, IConsoleServices consoleServices)
- Il nome della DLL deve coincidere con la parte finale del nome del namespace, ovvero deve essere HomeServerConsoleTab.NomePersonale.dll.
Seguendo questi accorgimenti, insieme alle altre linee guida di Microsoft (in particolare quelle riportate qui e qui), si arriva a produrre uno scheletro di add-in che dovrebbe apparire simile al seguente:
using System;
using System.Drawing;
using System.Windows.Forms;
using Microsoft.HomeServer.Extensibility;
namespace Microsoft.HomeServer.HomeServerConsoleTab.TestTab
{
public class HomeServerTabExtender : IConsoleTab
{
private int width;
private int height;
private IConsoleServices services;
private Control tabControl;
public HomeServerTabExtender(int width, int height, IConsoleServices consoleServices)
{
this.width = width;
this.height = height;
this.services = consoleServices;
tabControl = new Panel();
tabControl.Width = width;
tabControl.Height = height;
}
public string TabText
{
get { return "Tab Name"; }
}
public Bitmap TabImage
{
get { return Properties.Resources.TabIcon.ToBitmap(); }
}
public Control TabControl
{
get { return tabControl; }
}
public bool GetHelp()
{
return false;
}
public Guid SettingsGuid
{
get { return Guid.Empty; }
}
}
}
Nel prossimo post dedicato all'argomento parlerò di come si effettua il deploy di questo add-in.