Получение ошибки в консольном приложении 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;
}
2 ответа
Как вы упомянули в вопросе, неинициализированная переменная связана с ошибкой. следовать коду
Kubernetes KubeClient ;
var config = KubernetesClientConfiguration.InClusterConfig();
//for local testing BuildDefaultConfig && for cluster testing InClusterConfig
KubeClient = new Kubernetes(config);
Вы получите «ошибку использования неназначенной переменной», ну, если ваша переменная не назначена. Так обстоит дело здесь:
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.
}
}
Сделайте следующее:
- Прочтите об инициализации классов в C #, важно понимать это (Классы (Руководство по программированию на C #) для начала)
- Прочтите об инъекции зависимостей в целом и в ядре .net, это очень важно (например, Внедрение зависимостей в .NET)
- Прочтите документацию по вашей библиотеке Kubernetes, там должны быть образцы и инструкции по ее правильной инициализации.
Похожие вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.