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
我们可以直接向主控制器注入依赖项!但这不是依赖,而是继承的。要注入它,必须有一个构造函数参数,并且必须要注入一个非抽象类。我看不出这门课有什么原因