C# 在构造函数中使用凭据而不传入它们

C# 在构造函数中使用凭据而不传入它们,c#,C#,我有一个Windows窗体,要求用户输入用户名和密码 public partial class Login : Form { public bool LoginStatus { get; set; } public string UserName { get { return username.Text; } } public string PassWord { get { return password.Text; } } 我想将用户名和密码传递到另一个类的构造函

我有一个Windows窗体,要求用户输入用户名和密码

public partial class Login : Form
{
    public bool LoginStatus { get; set; }

    public string UserName { get { return username.Text; } }

    public string PassWord { get { return password.Text; } }
我想将
用户名
密码
传递到另一个类的构造函数中

public ICredentials Creds { get; set; } // <-- Can I use this ??
private readonly ICredentials _credentials;    

public Tools()
{
    _credentials = Creds;
}

public ICredentials Creds{get;set;}/如果您不想提供值来构造对象,那么它们不应该是构造函数的一部分。依赖项注入容器可能能够为这些值提供一些创建动态扩展的工作,但现实情况是(根据您的描述),您需要创建一个无参数构造函数或大量重构代码。

我同意@DavidHaney的观点,DI注入系统可以解决您的问题,尽管它需要一些重构

另一种方法是创建一个全局变量,将凭据存储在其中,然后从Tools类访问该全局变量。请注意,全局变量是“代码气味”,但有时需要

您可以使用线程存储,请参阅

或者,您可以在应用程序中声明一个静态变量。

Creds
在构造函数调用时永远不会被设置。如果您想集中这种逻辑,DI容器将是最佳选择。