Передача данных в PSCmdlet из его атрибута ArgumentTransformationAttribute

StackOverflow https://stackoverflow.com/questions/9335277

  •  27-10-2019
  •  | 
  •  

Вопрос

Обычно я пытаюсь создать код PSCmdlet, который принимает параметр типа, который реализует код IDisposeable и требует удаления, чтобы избежать утечки ресурсов.Я также хотел бы принять код string для этого параметра и создать экземпляр этого типа, однако, если я сам создаю этот объект, мне нужно удалить его перед возвратом из ProcessRecord.

Я использую код ArgumentTransformationAttribute с моим параметром, чтобы построить свой объект IDisposeable из строки, но я не могу найти способ передать данные из этого класса в свой код PSCmdlet о том, создал ли я объект или нет.Например:

родовое слово

Лучше всего я могу создать подкласс моего MyDisposeableClass, чтобы указать, что он требует явного удаления, но это кажется довольно хакерским, и хотя он работает в данном случае, он явно не сработает, если я захочу иметь дело с запечатанным классом..

Есть ли лучший способ сделать это?

Это было полезно?

Решение 2

В конце концов, я просто использую параметры, которые принимают тип, являющийся оболочкой MyDisposeable.Первоначально я беспокоился о том, что использование внутреннего типа для параметра повлияет на доступность функций.(Возможно, это отрицательно повлияет на документацию, но в командлете документация полностью контролируется файлом XML.)

После некоторого тестирования, похоже, не возникло никаких проблем с использованием внутреннего класса для параметра и просто позволяя преобразованию принимать общедоступные типы.Поэтому я просто создаю класс-оболочку:

родовое слово

И пусть параметр принимает это вместо этого.В атрибуте преобразования просто установите NeedsDisposed в зависимости от того, принял ли параметр код MyDisposeable или сконструированный.например:

родовое слово

Другие советы

Можете ли вы добавить свойство в свой класс MyDisposable вместо создания подклассов?

родовое слово

Затем в коде вашего атрибута

родовое слово

Наконец, в вашем блоке finally

родовое слово
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top