【发布时间】:2016-09-06 18:17:45
【问题描述】:
我已经创建了 IDataProvider 接口并像这样实现它:
public class DatabaseDataProviderBase : IDataProvider
{
private readonly IDatabaseConnectionStringProvider _databaseConnectionStringProvider;
private readonly IParameterApplicator<string> _sqlParameterApplicator;
private readonly IDatabaseDataProvider _databaseDataProvider;
public DatabaseDataProviderBase(IDatabaseConnectionStringProvider databaseConnectionStringProvider, IParameterApplicator<string> sqlParameterApplicator, IDatabaseDataProvider databaseDataProvider)
{
_databaseConnectionStringProvider = databaseConnectionStringProvider;
_sqlParameterApplicator = sqlParameterApplicator;
_databaseDataProvider = databaseDataProvider;
}
public DataSet GetData(SqlResource sqlResource, List<Parameter> parameters)
{
var connectionString = _databaseConnectionStringProvider.Get(sqlResource.SqlConnection);
var selectQuery = _sqlParameterApplicator.Apply(parameters, sqlResource.SelectQuery);
var dataSet = _databaseDataProvider.Get(connectionString, selectQuery);
return dataSet;
}
}
现在我需要很多从这个类继承的类。即NpgsqlDataProvider、MsSqlDataProvider、OdbcDataprovider 等等。这些类中的每一个都有自己的IDatabaseConnectionStringProvider 和IDatabaseDataProvider 实现。我将通过在 Ninject 模块中绑定它们来告诉使用哪个实现。
这是正确的方法还是有更好的解决方案?因为在此之前我已经使用了很多工厂,这些工厂创建了前面提到的接口的必要实现,很快就变成了维护它的噩梦。但是现在,这似乎是更好的方法——我有一个基类,我将从中继承和绑定继承类的必要依赖项。
然而,继承的类只是空的——它们正在使用这个基类DatabaseDataProviderBase 实现,因此,我觉得我做错了什么。建议表示赞赏。
【问题讨论】:
标签: c# asp.net inheritance dependency-injection ninject