Toolshed и (S)CSI

Toolshed можно свободно вызывать из scsi с помощью функций object? tsh(string toolshedCommand), T tsh<T>(string toolshedCommand) и TOut tsh<TIn, TOut>(TIn value, string toolshedCommand). Кроме того, вы можете вызывать любые функции IInvocationContext, такие как ReadVar, WriteVar и прочие, в интерактивном контексте, поскольку этот контекст реализует IInvocationContext.

Warning

Переменные Toolshed в csi и scsi не являются общими с консолью разработки, это разные контексты. Toolshed в C#-скриптинге может вызывать все команды независимо от разрешений, как консоль сервера. При использовании csi может потребоваться вручную инициализировать Toolshed на клиенте, вызвав ToolshedManager.Initialize().

Семантика вызова Toolshed

В команды Toolshed автоматически «передаётся по конвейеру» предоставленное начальное значение, а значит, первая предоставленная команда должна соответствовать начальному значению. Если начальное значение не предоставлено, этот тип равен [none], что соответствует семантике обычной консоли разработки. Если значение предоставлено, Toolshed ожидает, что первая команда будет соответствовать сигнатуре TIn -> ???, где TIn является типом предоставленного значения или некоторым его приведением к производному типу.

Тип выражения Toolshed и реальный тип

Как вы, вероятно, догадались, возвращаемое значение вызова команды toolshed не обязательно является фактическим типом возвращаемого значения; часто это интерфейс или другой тип более высокого уровня, который сам по себе не может быть создан. Никаких гарантий относительно того, каков нижележащий тип, нет, и не стоит делать о нём предположений.

Subpages