Что такое эквивалент C-Get-AzureRmResource в .NET SDK для Azure?

Функции стрелок - наиболее широко используемая функция ES6 до сих пор ...

Использование: все функции ES5 должны быть заменены функциями стрелок ES6, за исключением следующих сценариев:

Функции стрелок НЕ должны использоваться:

  1. Когда мы хотим, чтобы функция hoisting как функции стрелок была анонимной.
  2. Когда мы хотим использовать this / arguments в функции, поскольку функции стрелки не имеют this / arguments, они зависят от их внешнего контекста.
  3. Когда мы хотим использовать именованную функцию, поскольку функции стрелок анонимны.
  4. Когда мы хотим использовать функцию как constructor, поскольку функции стрелки не имеют своих this.
  5. Когда мы хотим добавить функцию как свойство в объектный литерал и использовать в ней объект, поскольку мы не можем получить доступ к this (который должен быть самим объектом).

Давайте рассмотрим некоторые из вариантов функций стрелок, которые лучше понять:

Вариант 1: Когда мы хотим передать более одного аргумента функции и вернуть некоторые

Версия ES5 :

var multiply = function (a,b) {
    return a*b;
};
console.log(multiply(5,6)); //30

Версия ES6 :

var multiplyArrow = (a,b) => a*b;
console.log(multiplyArrow(5,6)); //30

Примечание: ключевое слово function НЕ требуется. => требуется. {} являются необязательными, когда мы не предоставляем {} return неявно добавляется JavaScript, и когда мы предоставляем {}, нам нужно добавить return, если нам это нужно.

Вариант 2: Если мы хотим передать ТОЛЬКО один аргумент функции и вернуть некоторое значение из него.

Версия ES5 :

var double = function(a) {
    return a*2;
};
console.log(double(2)); //4

Версия ES6 :

var doubleArrow  = a => a*2;
console.log(doubleArrow(2)); //4

Примечание: при передаче только одного аргумента мы можем опустить скобки ().

Вариант 3: когда мы НЕ хотим передавать какие-либо аргумент функции и НЕ хотите возвращать какое-либо значение.

Версия ES5 :

var sayHello = function() {
    console.log("Hello");
};
sayHello(); //Hello

Версия ES6 :

var sayHelloArrow = () => {console.log("sayHelloArrow");}
sayHelloArrow(); //sayHelloArrow

Вариант 4: Если мы хотим явно вернуться из функций стрелок.

Версия ES6 :

var increment = x => {
  return x + 1;
};
console.log(increment(1)); //2

Вариант 5: Когда мы хотим вернуть объект из функций стрелок.

Версия ES6 :

var returnObject = () => ({a:5});
console.log(returnObject());

Примечание: нам нужно обернуть объект в скобки (), в противном случае JavaScript не может различать блок и объект.

Вариант 6: Arro w не имеют arguments (массив, такой как объект), они зависят от внешнего контекста для arguments.

Версия ES6 :

function foo() {
  var abc = i => arguments[0];
  console.log(abc(1));
};    
foo(2); // 2

Примечание: foo - это функция ES5 с массивом arguments, подобным объекту, и переданный ему аргумент 2, поэтому для foo для arguments[0] установлено значение arguments[0].

abc - это функция стрелок ES6, так как у нее нет ее arguments, поэтому она выводит arguments[0] в foo, это внешний контекст.

Вариант 7: Функции стрелки НЕ имеют this, они зависят от внешнего контекста для this

Версия ES5 :

var obj5 = {
  greet: "Hi, Welcome ",
  greetUser : function(user) {
        setTimeout(function(){
        console.log(this.greet + ": " +  user); // "this" here is undefined.
        });
     }
};

obj5.greetUser("Katty"); //undefined: Katty

Примечание. Обратный вызов, переданный setTimeout, является ES5 и имеет свой собственный this, который не определен в среде use-strict, поэтому мы получаем выход:

undefined: Katty

Версия ES6 :

var obj6 = {
  greet: "Hi, Welcome ",
  greetUser : function(user) {
    setTimeout(() => console.log(this.greet + ": " +  user)); 
      // this here refers to outer context
   }
};

obj6.greetUser("Katty"); //Hi, Welcome: Katty

Примечание. Обратный вызов, переданный в setTimeout, является функцией стрелок ES6, и у него нет своего this, поэтому он берет его из внешнего контекста, который является greetUser, который имеет this, который является obj6, следовательно мы получаем выход:

Hi, Welcome: Katty

Разное: мы не можем использовать функцию new со стрелками. Функции стрелки не имеют свойства prototype. У нас нет привязки this, когда функция стрелки вызывается через apply или call.

1
задан Leo Lazarus 16 January 2019 в 09:11
поделиться

1 ответ

Как сказали бы британцы: «Горе!»

TL; DR

Попробуйте:

using Microsoft.Azure.Management.ResourceManager.Fluent;
...

var rm = ResourceManager.                    
                .Configure()
                .WithLogLevel(HttpLoggingDelegatingHandler.Level.Basic)
                .Authenticate(credentials)
                .WithDefaultSubscription();

var resources= rm.GenericResources.List();

foreach(IGenericResource res in resources)
{
    ....
}

TL; DR 2

Некоторые комментарии указывают на метод расширения ResourceOperationsExtensions.List . Для этого требуется экземпляр IResourceOpearations. Это доступно через IResourceManagementClient.Resources . Это доступно через свойство ResourceManager.Inner :

var rmOps=rm.Inner.Resources;
var resources = rmOps.List(someODataQuery);

Длинная версия

Управление Azure работает путем предоставления интерфейсов REST. В конце концов, и Azure SDK, и командлеты Powershell будут вызывать этот интерфейс REST. Вы можете использовать Fiddler или другой прокси-сервер отладки для захвата и повторного использования

Командлеты Powershell реализованы поверх SDK, что означает, что вы можете просматривать сам исходный код . [1134 ]

Командлет использует метод ListResources класса класса ResourceManagerSdkClient с запросом OData, созданным из его параметров:

result = this.ResourceManagerSdkClient.ListResources(odataQuery);

К сожалению, это не помогает командлеты используют свои собственные низкоуровневые абстракции, в то время как библиотеки Azure RM используют различные абстракции и интерфейсы. ListResources говорит нам, что нам нужно запросить GenericResource.

Репозиторий библиотек Azure Resource Manager размещен на Github. Документация не показывает, как добраться до ResourceManager . Поиск в самом репо показывает, как ResourceManager используется в тестах .

ResourceManager.GenericResources предоставляет доступ к тем же универсальным ресурсам, которые использует команда Powershell. Тип этого свойства - IGenericResources , который, в свою очередь, реализует ISupportsListing , который дает нам доступ к List

. интерфейсы явно реализованы. Код может нуждаться в явном приведении.

IGenericResources также реализует ISupportsListingByResourceGroup и ISupportsListingInResourceGroupByTag, которые можно использовать для поиска по группам ресурсов и тегам.

Поиск в Google по ResourceManager.GenericResources или GenericResources.List() и т. Д. Не дает соответствующих результатов. Термины слишком ... общие.

1142 Я думаю, что сейчас сделаю перерыв. [Тысяча сто сорок два]
0
ответ дан Panagiotis Kanavos 16 January 2019 в 09:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: