Quando si espone un set di funzioni correlate nei cmdlet di PowerShell, è possibile condividere i nomi di proprietà e la guida di riepilogo per normalizzarli attraverso cmdlet in un assembly?È possibile condividere proprietà e commenti tra i cmdlet di PowerShell in C#?
So che questo può essere fatto con le classi derivate, ma questa soluzione è scomoda al meglio quando ci sono più cmdlet con proprietà differenti da condividere.
Ecco un esempio estremamente semplice. Mi piacerebbe condividere la proprietà 'Nome' e tutti i commenti correlati in modo che siano uguali tra i cmdlet N che produciamo, ma non riesco a pensare a un buon modo per farlo in C#. Idealmente, qualsiasi condivisione consentirebbe la specifica degli attributi del parametro come Obbligatorio o Posizione.
namespace FrozCmdlets
{
using System.Management.Automation;
/// <summary>
/// Adds a new froz to the system.
/// </summary>
[Cmdlet(VerbsCommon.Add, "Froz")]
public class AddFroz : Cmdlet
{
/// <summary>
/// The name of the froz.
/// For more information on the froz, see froz help manual.
/// </summary>
[Parameter]
public string Name { get; set; }
protected override void ProcessRecord()
{
base.ProcessRecord();
// Add the froz here
}
}
/// <summary>
/// Removes a froz from the system.
/// </summary>
[Cmdlet(VerbsCommon.Remove, "Froz")]
public class RemoveFroz : Cmdlet
{
/// <summary>
/// The name of the froz.
/// For more information on the froz, see froz help manual.
/// </summary>
[Parameter]
public string Name { get; set; }
protected override void ProcessRecord()
{
base.ProcessRecord();
// Remove the froz here
}
}
}
Se non si vuole derivare (non sono chiari sul motivo) il modo migliore per condividere i commenti è usare XML include (guarda il codice sorgente del framework). La documentazione del codice viene mantenuta al di fuori del codice, può essere scritta e gestita (se necessario) da qualcun altro e può essere condivisa tra classi e persino assiemi. –
@Adriano Grazie per l'idea di guardare i commenti di condivisione tramite XML include. Il ragionamento dietro non voler derivare è che è possibile fare in modo pulito. Se il cmdlet A utilizza P1, P2 mentre il cmdlet B usa P2, P3 e cmdlet C utilizza P1, P3 non è possibile derivare e condividere P1, P2, P3 come desiderato. Mi rendo anche conto che la mia idea di condividere queste proprietà potrebbe non essere ben fondata. È appena diventato una seccatura aggiornare i punti N ogni volta che qualcosa cambia e sono sicuro che odio copiare e incollare il codice. – pennyowe
Oh, allora hai ragione! Ho solo pensato che avessero molte proprietà condivise. L'unico modo in cui penso di farlo è tramite include (ma va bene solo per i commenti). Un giorno (forse ...) avremo un'eredità multipla ... –