C# 如何在控制器c中访问抽象类连接字符串#
这里是抽象类中的连接字符串,如何访问连接字符串C# 如何在控制器c中访问抽象类连接字符串#,c#,asp.net-web-api,connection-string,abstract-class,C#,Asp.net Web Api,Connection String,Abstract Class,这里是抽象类中的连接字符串,如何访问连接字符串 public abstract class Connection { public SqlConnection sqlConn = null; public SqlConnection GetConnection { get { return sqlConn;} set { value = sqlConn; } } public Connection() {
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
}
}
首先继承抽象类,然后可以使用连接字符串。。。
当您必须从抽象类访问任何内容时,您需要继承该抽象类,然后才能使用它。首先继承抽象类,然后可以使用连接字符串。。。
当您必须从抽象类访问任何内容时,您需要继承该抽象类,然后才能使用它。您不能实例化抽象类,而是应该实现该类,然后在控制器中使用继承的类 首先创建一个新类
public class SqlServerConnection : Connection
{
}
然后在你的控制器里
public class HomeController : ApiController
{
SqlServerConnection conn = new SqlServerConnection();
internal void Getconnection
{
SqlConnection connection = conn.GetConnection();
}
}
顺便说一下,如果抽象类用于多种连接类型(如Sql server、Oracle等),我建议您重新考虑代码,您可以通过搜索轻松找到最佳实践。您不能实例化抽象类,而是应该实现该类,然后在控制器中使用继承类 首先创建一个新类
public class SqlServerConnection : Connection
{
}
然后在你的控制器里
public class HomeController : ApiController
{
SqlServerConnection conn = new SqlServerConnection();
internal void Getconnection
{
SqlConnection connection = conn.GetConnection();
}
}
顺便说一句,如果抽象类适用于多种连接类型(如Sql server、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 ;
}
}
如果您同意在构造函数中不包含代码, 将连接字符串设为静态变量:
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#没有。相反,您可以链接这些类型。你也应该给他们起个更有意义的名字 因此,将其命名为
SqlConnectionApiController
或其他名称,而不是Connection
,因此它看起来像这样:
public abstract class SqlConnectionApiController : ApiController
{
// ...
}
HomeController : SqlConnectionApiController : ApiController
然后您的HomeController
可以从该类型继承:
public class HomeController : SqlConnectionApiController
{
public HomeController()
{
var connection = base.GetConnection();
}
}
因此,继承树如下所示:
public abstract class SqlConnectionApiController : ApiController
{
// ...
}
HomeController : SqlConnectionApiController : ApiController
我也会考虑不直接使用Sql连接,而是使用一个更高级的构造,比如ORM,例如通过实体框架。
< p>您正在寻找多个继承,而C没有。相反,您可以链接这些类型。你也应该给他们起个更有意义的名字 因此,将其命名为SqlConnectionApiController
或其他名称,而不是Connection
,因此它看起来像这样:
public abstract class SqlConnectionApiController : ApiController
{
// ...
}
HomeController : SqlConnectionApiController : ApiController
然后您的HomeController
可以从该类型继承:
public class HomeController : SqlConnectionApiController
{
public HomeController()
{
var connection = base.GetConnection();
}
}
因此,继承树如下所示:
public abstract class SqlConnectionApiController : ApiController
{
// ...
}
HomeController : SqlConnectionApiController : ApiController
我也会考虑不直接使用Sql连接,而是使用一个更高级的构造,比如ORM,例如通过实体框架.< /p> Saik,我在哪里可以继承我的CalnIdCin控制器CaseSaHik,在哪里我可以继承我的CalpIn控制器CLASIS?这是ASP的东西吗?你们班没有共同点。您的抽象类至少需要一个字段/属性。。。访问连接。也许ApiController有一个现场连接
Getconnection:Connection()
是错误的(比如VS 2015),没有这样的符号。因此,您可以通过this.Fieldname/Propertyname访问Parant类的成员,也可以不使用“this”。e、 g.```this.sqlConn
或者如果从Connection
继承,那么在构造函数中是否需要该函数?为什么你有一个抽象,然后是一个构造函数?@Nazerane我的连接不是创建一个instance,这是我的主要意图。构造函数主要是创建一个新实例。如果您使用构造函数,它将创建一个新实例。如果您想使用连接,抽象类的后代在某个时候需要知道它。您可以创建字段、属性或/并将其作为构造函数参数传递。也许你想提取一个抽象类使用的IConnection接口,这是ASP的东西吗?你们班没有共同点。您的抽象类至少需要一个字段/属性。。。访问连接。也许ApiController有一个现场连接Getconnection:Connection()
是错误的(比如VS 2015),没有这样的符号。因此,您可以通过this.Fieldname/Propertyname访问Parant类的成员,也可以不使用“this”。e、 g.```this.sqlConn
或者如果从Connection
继承,那么在构造函数中是否需要该函数?为什么你有一个抽象,然后是一个构造函数?@Nazerane我的连接不是创建一个instance,这是我的主要意图。构造函数主要是创建一个新实例。如果您使用构造函数,它将创建一个新实例。如果您想使用连接,抽象类的后代在某个时候需要知道它。您可以创建字段、属性或/并将其作为构造函数参数传递。也许您想要提取一个IConnection接口,这是抽象类所使用的,仅就我所知:更好的方法是将接口用于连接字符串。。建议?@Div为什么界面会有帮助?在这种情况下,不需要创建SqlConnectionApiController
我们可以直接向主控制器注入依赖项!但这不是依赖,而是继承的。要注入它,必须有一个构造函数参数,并且必须要注入一个非抽象类。无论如何,我看不出这个类在那个场景中是抽象的原因。就我所知:更好的方法是对连接字符串使用接口。。建议?@Div为什么界面会有帮助?在这种情况下,不需要创建SqlConnectionApiController
我们可以直接向主控制器注入依赖项!但这不是依赖,而是继承的。要注入它,必须有一个构造函数参数,并且必须要注入一个非抽象类。我看不出这门课有什么原因