C# & unity DI:接口 属性 无法访问扩展接口的内部 class 函数

C# & unity DI : interface property not being able to access inside class function which extend interface

我的界面一机多能属性。扩展接口的 class 然后我们可以从在相同 class 中声明的函数访问 属性。在这里,我使用 unity 动态调用 return IDBConnection 对象的函数。

当我编译代码时出现类似

的错误

The name 'ConType' does not exist in the current context

我无法弄清楚我在哪里犯了错误。所以请有人看到我的完整代码并告诉我我在哪里犯了错误以及在哪里以及如何解决它。

class代码

public interface BBAConnections
{
    IDbConnection  CreateConnection();
    string ConType { get; set; }
}

public class BBAConnection : BBAConnections
{
    string ConType { get; set; } 

    public  IDbConnection CreateConnection()
    {
        string _connectionString = "";
        IDbConnection connection=null;

        if (ConType == "local")
        {
            _connectionString = "put here local db connection";
            connection = new System.Data.SqlClient.SqlConnection(_connectionString);
        }
        else if (ConType == "remote")
        {
            _connectionString = "put here remote db connection";
            connection = new System.Data.SqlClient.SqlConnection(_connectionString);
        }
        else if (ConType == "OrcsWeb")
        {
            _connectionString = "put here website db connection";
            connection = new System.Data.SqlClient.SqlConnection(_connectionString);
        }
        else if (ConType == "Sage")
        {
            _connectionString = "put here sage connection";
            connection = new System.Data.SqlClient.SqlConnection(_connectionString);
        }

        return connection;
    }
}

public static class Factory
{
    static IUnityContainer cont = null;

    public static BBAConnections initialize(string type)
    {
        BBAConnections oDbConnection = null;

        cont = new UnityContainer();
        cont.RegisterType<BBAConnections, BBAConnection>("local");
        cont.RegisterType<BBAConnections, BBAConnection>("remote");
        cont.RegisterType<BBAConnections, BBAConnection>("OrcsWeb");
        cont.RegisterType<BBAConnections, BBAConnection>("Sage");

        oDbConnection = cont.Resolve<BBAConnections>(type);
        oDbConnection.ConType = type;

        return oDbConnection;
    }
}

像这样调用 CreateConnection 函数

Factory.initialize("local").CreateConnection();

将实施中的声明 class 更改为

public string ConType { get; set; } 

首先,C#区分大小写,所以你应该将所有IDbConnection改为IDBConnection.

现在,您的界面表示从它继承的任何内容都必须具有 CreateConnection 方法ConType 属性

在您的 BBAConnection class 中,您应该创建一个名为 ConType 的 public 字符串 属性。

这应该可以修复您的代码,它应该如下所示:

public interface IDBConnection
{
    IDBConnection CreateConnection();
    string ConType { get; set; }
}

public class BBAConnection : IDBConnection
{
    public string ConType { get; set; }

    public IDBConnection CreateConnection()
    {
        string _connectionString = "";
        IDBConnection connection = null;

        if (ConType == "local")
        {
            _connectionString = "put here local db connection";
            connection = new System.Data.SqlClient.SqlConnection(_connectionString);
        }
        else if (ConType == "remote")
        {
            _connectionString = "put here remote db connection";
            connection = new System.Data.SqlClient.SqlConnection(_connectionString);
        }
        else if (ConType == "OrcsWeb")
        {
            _connectionString = "put here website db connection";
            connection = new System.Data.SqlClient.SqlConnection(_connectionString);
        }
        else if (ConType == "Sage")
        {
            _connectionString = "put here sage connection";
            connection = new System.Data.SqlClient.SqlConnection(_connectionString);
        }

        return connection;
    }
}

public static class Factory
{
    static IUnityContainer cont = null;

    public static IDBConnection initialize(string type)
    {
        IDBConnection oDbConnection = null;

        cont = new UnityContainer();
        cont.RegisterType<IDBConnection, BBAConnection>("local");
        cont.RegisterType<IDBConnection, BBAConnection>("remote");
        cont.RegisterType<IDBConnection, BBAConnection>("OrcsWeb");
        cont.RegisterType<IDBConnection, BBAConnection>("Sage");

        oDbConnection = cont.Resolve<IDBConnection>(type);
        oDbConnection.ConType = type;

        return oDbConnection;
    }
}