对象的新实例正在跳过重载构造函数

本文关键字:重载 构造函数 新实例 实例 对象 | 更新日期: 2023-09-27 18:22:03

使用vs2012,我得到了一个测试单元项目(用于测试服务),该项目包含.edmx文件和linq。edmx是在设计时创建的,我创建了一个对象(称为Store.Data.Common),用于从App.Config文件中检索连接字符串(解密字符串并构建包括元数据在内的整个字符串):

//Object is called Store.Data.Common
public static string GetConnectionString(string databaseName)
{
    var security = new Security();
    var connectionString = security.GetDecoded(ConfigurationManager.ConnectionStrings[databaseName+"Encrypted"].ToString(), 0);
    var environment = ConfigurationManager.AppSettings["Environment"].ToString();
    var dataSource = security.GetDecoded(ConfigurationManager.AppSettings[environment], 0);
    connectionString = string.Format(connectionString, dataSource);
    return connectionString;
}

我还修改了.tt文件,以包含构造函数的重载,从而调用此方法来构建连接字符串,如下所示:

//Original Constructor which I modified and added the parameter to pass to the other constructor.
public StoreContext()
 : base("name=StoreContext")
{
}
//Constructor I added:
public StoreContext(string connection)
{
    Store.Data.Common.ConnectionBuilder.GetConnectionString("StoreContext");
}

然而,当我尝试为StoreContext新建一个对象并将构造函数留空时,一切都会正确构建,它永远不会到达第二个构造函数:

StoreContext storeContext = new StoreContext();

当我调试这个测试并遍历它时,它只到达第一个构造函数,就这样了

StoreContext storeContext = new StoreContext("Blah");

然后,它如预期的那样进入第二个。。。。我的问题是,为什么第一个方法在不向构造函数传递任何内容的情况下不起作用?从技术上讲,它应该有效,对吧?

对象的新实例正在跳过重载构造函数

我认为你的意思是使用

public StoreContext()
  : this("name=StoreContext")
{
}

(使用this而不是base)。

使用this()意味着您在同一个类上调用构造函数。当您说base()时,您正试图调用基类上的构造函数。

编辑:它看起来也不像是在使用传递给非默认构造函数的参数。但这是另一个问题,而不是你问题的根源