Получение ошибки в консольном приложении c #.

Использование неназначенной локальной переменной KubeClient

Я пробовал использовать клиент Kubernetes в своем приложении. Но он работает с указанной выше ошибкой. Я знаю, что ошибка связана с неинициализированной переменной KubeClient. Но я использовал этот способ в своем проекте webapi. Я не понимаю разницы. Как мне инициализировать клиент Kubernetes.

недоступен из-за уровня защиты

. пожалуйста, помогите мне?

Мой код

using k8s;
using k8s.Models;


public bool ReadTLSSecretIteratable(string secretname, string namespacename)
        {
            V1Secret sec = null;
            Kubernetes KubeClient;
            try
            {
                 sec = KubeClient.ReadNamespacedSecret(secretname, namespacename);
            }
            catch (Microsoft.Rest.HttpOperationException httpOperationException)
            {
                var content = httpOperationException.Response.Content;
                Console.WriteLine(content);
                throw httpOperationException;

            }
retrun true;
}
0
avancho marchos 24 Фев 2021 в 10:17

2 ответа

Лучший ответ

Как вы упомянули в вопросе, неинициализированная переменная связана с ошибкой. следовать коду

Kubernetes KubeClient ;
var config = KubernetesClientConfiguration.InClusterConfig();
//for local testing BuildDefaultConfig && for cluster testing InClusterConfig
KubeClient = new Kubernetes(config);
2
june alex 24 Фев 2021 в 08:23

Вы получите «ошибку использования неназначенной переменной», ну, если ваша переменная не назначена. Так обстоит дело здесь:

Kubernetes KubeClient;

Переменной KubeClient не присвоено значение. Если вы написали:

Kubernetes KubeClient = null;

Чем ошибка времени компиляции исчезнет, ​​потому что теперь значение равно NULL. Однако это не решит проблему, потому что, очевидно, вы не можете вызывать методы для переменных, которые имеют значение null (не имеют значения), и во время выполнения вы получите исключение с нулевой ссылкой.

Обычный способ инициализировать переменную - с помощью new:

Kubernetes KubeClient = new Kubernetes([pass constructor parameters]);

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

Kubernetes KubeClient = Kubernetes.Create([pass constructor parameters]);

Наконец, есть инъекция зависимостей, которая, я думаю, была в случае с проектом webapi. Вы регистрируете типы с помощью контейнера зависимостей, а затем просто получаете их, когда вам нужно, через конструктор или иногда свойства:

public class MyClass
{
   public MyClass(Kubernetes k)
   {
      // Kubernetes is passed by DI container without new keyword.
   }
}

Сделайте следующее:

2
Maxim Zabolotskikh 24 Фев 2021 в 08:01