这是我在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
}
}
答案 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 ;
}
}