具有接口隔离的依赖注入 Ioc



我正在使用两个数据库oracle和sql服务器。我正在使用依赖注入使系统通用。代码如下

public interface IDatabases
{
string GetEmployeeFullName();
}
public class OracleDB:IDatabases
{
public string GetEmployeeFullName()
{
return "Name oracle";
}
}
public class SqlServerDB : IDatabases
{
public string GetEmployeeFullName()
{
return "Name sql server";
}
}
public class RegistrationStaff 
{
private IDatabases objDatabase;
public RegistrationStaff(IDatabases vobjDataBase)
{
this.objDatabase = vobjDataBase;            
}
}

我需要sql服务器类中的另一个函数GetEmployeeId,它将返回sql服务器数据库中可用的员工ID。我不希望在预言机中实现此函数。如何将接口隔离与依赖注入一起使用并在注册人员类中实现。

public interface IsqlServer:IDatabases
{
void GetEmployeeId();
}

我只想使用构造函数进行依赖注入

我认为你已经走在正确的道路上了。为隔离创建一个新接口,添加新方法并让 SQL 服务器类从中继承。因此,毕竟您必须在 Register 类中强制转换数据库对象才能调用该方法。但是如果你不把方法放在顶层,我就看不到没有铸造的方法。

public interface IDatabases
{
string GetEmployeeFullName();
}
public interface ISQLDatabase : IDatabases
{
int GetEmployeeId();
}
public class OracleDB : IDatabases
{
public string GetEmployeeFullName()
{
return "Name oracle";
}
}
public class SqlServerDB : ISQLDatabase
{
public string GetEmployeeFullName()
{
return "Name sql server";
}
public int GetEmployeeId()
{
return 1;
}
}
public class RegistrationStaff
{
private IDatabases objDatabase;
public RegistrationStaff(IDatabases vobjDataBase)
{
this.objDatabase = vobjDataBase;
if (this.objDatabase is ISQLDatabase)
{
Console.WriteLine(((ISQLDatabase)this.objDatabase).GetEmployeeId());
}
}
}

最新更新