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

时间:2014-06-11 01:14:23

标签: 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; } }

我想将UserNamePassWord传递到另一个类的构造函数中。

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

public Tools()
{
    _credentials = Creds;
}

经常使用Tools()类,我想取UserNamePassWord并将它们放在构造函数中而不传入它们,因为那时我必须对它进行更改Tools()类的所有实例。那可能吗?或者我是否必须将UserNamePassWord传递给构造函数?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

另一种方法是创建一个全局变量,将凭证存储在那里,然后从Tools类访问这个全局变量。请注意,全局变量是代码味道&#39;但有时需要。

您可以使用线程存储,请参阅http://msdn.microsoft.com/en-us/library/6sby1byh(v=vs.110).aspx

或者您可以在应用内声明一个静态变量。