如何在控制器 C# 中访问抽象 class 连接字符串
How to access abstract class connection string in controller c#
这里是我的摘要连接字符串 class,如何访问我的连接字符串?
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
}
}
首先继承Abstract Class 然后就可以使用连接字符串了...
当您必须从抽象 class 访问任何内容时,您需要继承该抽象 class 然后才能使用它。
您不能实例化一个抽象 class,而是您应该实现这个 class 然后在您的控制器中使用继承的 class。
先新建一个class
public class SqlServerConnection : Connection
{
}
然后在你的控制器中
public class HomeController : ApiController
{
SqlServerConnection conn = new SqlServerConnection();
internal void Getconnection
{
SqlConnection connection = conn.GetConnection();
}
}
顺便说一下,如果抽象 class 用于多种连接类型(例如 Sql 服务器、Oracle 等),我建议您重新考虑您的代码,您可以轻松找到最佳实践通过搜索。
如果您不介意构造函数中没有您的代码,
使您的连接字符串成为静态变量:
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 ;
}
}
您正在寻找 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。
这里是我的摘要连接字符串 class,如何访问我的连接字符串?
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
}
}
首先继承Abstract Class 然后就可以使用连接字符串了... 当您必须从抽象 class 访问任何内容时,您需要继承该抽象 class 然后才能使用它。
您不能实例化一个抽象 class,而是您应该实现这个 class 然后在您的控制器中使用继承的 class。
先新建一个class
public class SqlServerConnection : Connection
{
}
然后在你的控制器中
public class HomeController : ApiController
{
SqlServerConnection conn = new SqlServerConnection();
internal void Getconnection
{
SqlConnection connection = conn.GetConnection();
}
}
顺便说一下,如果抽象 class 用于多种连接类型(例如 Sql 服务器、Oracle 等),我建议您重新考虑您的代码,您可以轻松找到最佳实践通过搜索。
如果您不介意构造函数中没有您的代码, 使您的连接字符串成为静态变量:
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 ;
}
}
您正在寻找 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。