Передача данных в PSCmdlet из его атрибута ArgumentTransformationAttribute
-
27-10-2019 - |
Вопрос
Обычно я пытаюсь создать код PSCmdlet
, который принимает параметр типа, который реализует код IDisposeable
и требует удаления, чтобы избежать утечки ресурсов.Я также хотел бы принять код string
для этого параметра и создать экземпляр этого типа, однако, если я сам создаю этот объект, мне нужно удалить его перед возвратом из ProcessRecord
.
Я использую код ArgumentTransformationAttribute
с моим параметром, чтобы построить свой объект IDisposeable
из строки, но я не могу найти способ передать данные из этого класса в свой код PSCmdlet
о том, создал ли я объект или нет.Например:
Лучше всего я могу создать подкласс моего MyDisposeableClass
, чтобы указать, что он требует явного удаления, но это кажется довольно хакерским, и хотя он работает в данном случае, он явно не сработает, если я захочу иметь дело с запечатанным классом..
Есть ли лучший способ сделать это?
Решение 2
В конце концов, я просто использую параметры, которые принимают тип, являющийся оболочкой MyDisposeable
.Первоначально я беспокоился о том, что использование внутреннего типа для параметра повлияет на доступность функций.(Возможно, это отрицательно повлияет на документацию, но в командлете документация полностью контролируется файлом XML.)
После некоторого тестирования, похоже, не возникло никаких проблем с использованием внутреннего класса для параметра и просто позволяя преобразованию принимать общедоступные типы.Поэтому я просто создаю класс-оболочку:
родовое слово И пусть параметр принимает это вместо этого.В атрибуте преобразования просто установите NeedsDisposed
в зависимости от того, принял ли параметр код MyDisposeable
или сконструированный.например:
Другие советы
Можете ли вы добавить свойство в свой класс MyDisposable вместо создания подклассов?
родовое словоЗатем в коде вашего атрибута
родовое словоНаконец, в вашем блоке finally
родовое слово