如何访问控制器c#中的抽象类连接字符串

时间:2017-12-14 07:17:49

标签: c# asp.net-web-api connection-string abstract-class

这是我在Abstract类中的连接字符串,如何访问我的连接字符串?

public abstract class Connection
{
    public SqlConnection sqlConn = null;

    public SqlConnection GetConnection
    {
        get { return sqlConn;}
        set { value = sqlConn; }
    }

    public Connection()
    {
        string cons = ConfigurationManager.ConnectionStrings["CTXDb"].ConnectionString;
        sqlConn = new SqlConnection(cons);
   }
}

HomController.cs:

public class HomeController : ApiController
{
  //Connection db = new Connection();  /// cannot create instance of an abstract class
   public HomeController:Connection()
   {
    //Here How can i get my connection 
   }
}

4 个答案:

答案 0 :(得分:1)

您不能实例化抽象类,而应该实现此类,然后在控制器中使用继承的类。

首先创建一个新类

public class SqlServerConnection : Connection
{

}

然后在您的控制器中

public class HomeController : ApiController
{
    SqlServerConnection conn = new SqlServerConnection();
    internal void Getconnection
    {
        SqlConnection connection = conn.GetConnection();
    }
}

顺便说一下,如果抽象类用于多种连接类型(例如Sql server,Oracle等),我建议您重新考虑您的代码,您可以通过搜索轻松找到最佳实践。

答案 1 :(得分:1)

您正在寻找C#没有的多重继承。相反,你可以链接类型。你也应该给他们更有意义的名字。

所以不是Connection,而是将其命名为SqlConnectionApiController或其他内容,所以它看起来像这样:

public abstract class SqlConnectionApiController : ApiController
{
    // ...
}

然后您的HomeController可以继承该类型:

public class HomeController : SqlConnectionApiController 
{
    public HomeController()
    {
        var connection = base.GetConnection();
    }
}

所以继承树看起来像这样:

HomeController : SqlConnectionApiController : ApiController

我还考虑不直接使用SqlConnection,而是使用更高级别的构造,例如ORM,例如通过Entity Framework。

答案 2 :(得分:0)

首先继承Abstract Class然后你可以使用连接字符串... 当你必须从抽象类访问任何东西时,你需要继承那个抽象类,然后你可以使用它。

答案 3 :(得分:0)

如果您没有在构造函数中使用代码,那么 使您的连接字符串成为静态变量:

static SqlConnection sqlConn = null;

public static SqlConnection GetConnection 
    => sqlConn ?? (sqlConn = new SqlConnection(ConfigurationManager.ConnectionStrings["CTXDb"].ConnectionString));

或更易读的代码:

static SqlConnection sqlConn = null;

public static SqlConnection GetConnection {
get {
    if (sqlConn == null)
    {
        string cons = ConfigurationManager.ConnectionStrings["CTXDb"].ConnectionString;
        sqlConn = new SqlConnection(cons)
    }
    return sqlConn ;
}
}