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;
}
正如您在问题中提到的未初始化变量是由于错误造成的。遵循代码
Kubernetes KubeClient ;
var config = KubernetesClientConfiguration.InClusterConfig();
//for local testing BuildDefaultConfig && for cluster testing InClusterConfig
KubeClient = new Kubernetes(config);
如果你的变量没有赋值,你会得到"using unassigned variable error"下面的例子是:
Kubernetes KubeClient;
KubeClient变量没有分配值。如果你写:
Kubernetes KubeClient = null;
的编译时错误就会消失,因为现在值是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#中的类初始化,理解它是至关重要的(classes (c# Programming Guide) for a start)
- 阅读一般和。net核心的依赖注入,它是非常重要的(例如。net中的依赖注入)
- 阅读Kubernetes库的文档,应该有如何正确初始化它的示例和说明