Собственно, полиморфизм на уровне модулей. Для меня - почти ту же самую что и в статье. В своём модуле GeneralDeploymentScripts хотелось бы иметь функцию New-BuildInfo, которая бы формировала [hashtable] со значенииями общими для всех деплойментов. Но в некоторых деплойментах, которые думается реализовать как модули вроде SomeAppDeployment, зависящие от GeneralDeploymentScripts, и кроме прочего переопределяющие New-BuildInfo из GeneralDeploymentScripts, но чтобы Publish-BuildInfo из GeneralDeploymentScripts выполнила бы New-BuildInfo из SomeAppDeployment. На практике ровно один SomeAppDeployment в котором переопределена New-BuildInfo (ну или последний загруженный - "его и такпки"). Такой механизм позволил бы переопределять более одной функции. В этой связи решениия вроде следующих нехороши: - передавать scriptblock в Publish-BuildInfo, - не очень ясно как в общем случае. Много писанины, - скрипты на стороне конретного деплоймента должны быть максимально короткими. - в SomeAppDeployment определять не New-BuildInfo, а Get-BuildInfoExtension, а в GeneralDeploymentScripts выполнять, если определена. - не определять базовую New-BuildInfo в GeneralDeploymentScripts (теряется собственно сама идея общей функциональности).
переопределять функции можно и даже использовать функции в одном скрипте из разный модулей, но дебажить это ад
Вопрос, собственно, в том, как "базывый" модуль узнает, что ему надо дёрнуть одноимённую функцию из другого модуля. Как вообще это возможно, - скоуп же другой? Статья выше предлагает некое решение (которое выглядит как хак), но не публикует код.
https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_command_precedence?view=powershell-7.3
Обсуждают сегодня