Если вы раскрываете набор связанных функций в командлетах Powershell, можно ли обмениваться именами свойств и сводной справкой для нормализации этих командлетов в сборке?Можно ли делиться свойствами и комментариями между командлетами Powershell в C#?
Я знаю, что это можно сделать с производными классами, но это решение в лучшем случае неудобно, когда есть несколько командлетов с разными свойствами, которые будут использоваться совместно.
Вот очень простой пример. Я хотел бы поделиться свойством «Имя» и всеми связанными комментариями, чтобы они были одинаковыми для всех командлетов N, которые мы производим, но я не могу придумать хороший способ сделать это в C#. В идеале любое совместное использование позволило бы специфицировать атрибуты параметров, такие как Обязательный или Позиция.
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
}
}
}
Если вы не хотите получать (я не совсем понимаю причину), лучшим способом обмена комментариями является использование XML (см. Исходный код фреймворка). Вы сохраняете документацию кода вне своего кода, ее можно записать и сохранить (если необходимо) кем-то другим, и ее можно разделить между классами и даже сборками. –
@Adriano Спасибо за идею взглянуть на обмен комментариями через XML. Причина, по которой вы не хотите получать, - это то, что можно сделать чисто. Если командлет A использует P1, P2, в то время как командлет B использует P2, P3 и командлет C использует P1, P3, нет способа получить и совместно использовать P1, P2, P3 по желанию. Я также понимаю, что моя идея делиться этими свойствами может быть необоснованной. Это просто стало проблемой для обновления N мест всякий раз, когда что-то меняется, и я действительно ненавижу копировать и вставлять код. – pennyowe
О, тогда ты прав! Я просто подумал, что у них много общих свойств. Только так я думаю, что это сделать через include (но это нормально только для комментариев). Когда-нибудь (возможно ...) у нас будет множественное наследование ... –