作者:鱼鱼de眼泪2012 | 来源:互联网 | 2023-09-14 14:03
我正在尝试利用从学习SOLID原理中学到的知识来制作简单的ASP.NETWebform.我已经将解决方案设置为3个项目:主要的asp.netWebforms项目,DataAcc
我正在尝试利用从学习SOLID原理中学到的知识来制作简单的ASP.NET Webform.
我已经将解决方案设置为3个项目:主要的asp.net Webforms项目,Data Access Interfaces类库项目和Data Access类库项目(具有Data Access Interfaces项目中接口的实现).
我在数据访问接口程序集中有一个ICoinStorage接口,看起来像这样(Coin只是生活在数据访问接口程序集中的DTO类):
public interface ICoinStorage
{
void Persist(IEnumerable coins);
}
该接口的实现在名为CoinSqlServerStorage的数据访问程序集中使用ADO.NET,如下所示:
public class CoinSqlServerStorage : ICoinStorage
{
private string sqlConnectionString;
public CoinSqlServerStorage(string connectionStringName)
{
sqlCOnnectionString= ConfigurationManager.ConnectionStrings[connectionStringName].ConnectionString;
}
public void Persist(IEnumerable coins)
{
using (var cOnnection= new SqlConnection(sqlConnectionString))
using (var command = new SqlCommand() { COnnection= connection })
{
foreach (var coin in coins)
{
command.Parameters.AddWithValue("@Name", coin.Name);
command.Parameters.AddWithValue("@Weight", coin.Weight);
command.Parameters.AddWithValue("@Thickness", coin.Thickness);
command.Parameters.AddWithValue("@Value", coin.Value);
command.Parameters.AddWithValue("@Condition", (int)coin.Condition);
command.CommandText = "INSERT INTO Coins (Name, Weight, Thickness, Value, ConditionID) " +
"VALUES (@Name, @Weight, @Thickness, @Value, @Condition);";
command.Connection.Open();
command.ExecuteNonQuery();
}
}
}
}
我的问题是:如何在webforms项目中使用CoinSqlServerStorage类而不创建对Data Access程序集的依赖?我要制作它,以便用户可以访问InsertCoin.aspx页面来定义新硬币并将其存储在数据库中…
当我准备在InsertCoin.aspx页面的Page.Load事件中创建CoinSqlServerStorage类的实例时,出现了我的问题,但是意识到这会在数据访问程序集上创建依赖关系,而不仅仅是依赖于数据访问接口部件…
我该如何进行?
解决方法:
在这种情况下,您可以再创建一个项目,然后像Data Access DI一样调用它,该项目将引用Data Access和Data Access Interfaces项目.该项目将负责为所有其他项目提供所需的数据访问接口实现(需要这样做).
但是即使在这种情况下,您也将有两个依赖性:数据访问接口和数据访问DI-第一个将提供接口,第二个将提供实现.
即使您将拥有多个Data Access What项目,例如Data Access Mongo,Data Access Sql,Data Access Raven等,此Data Access DI项目也将使您的其他项目与实现隔离.