热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

首页>C#>我如何使用我的接口的实现,而不创建对实现的依赖?

我正在尝试利用从学习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项目也将使您的其他项目与实现隔离.


推荐阅读
  • [网页设计]新手做 网站 必备 软件。及 下载 地址~~~~(06年10月10日修订)
      1、做网站先要从策划开始msvcp71dll下载。  MicrosoftOffice2007Beta2简体中文版  M ... [详细]
  • 缓存的重要性就不用再强调了,@OutputCache给我们提供了一种声明的方式(对应的还有编程的方式)来控制页面和用户控件的缓存策略,这是一种最简单直接的网站优化方式。还是先来过一遍@ ... [详细]
  • 突然觉得服务器ssh密码登录总是浪费一定量的时间,就想试试用sshKey进行登录。生成服务器sshkey和本地sshkey$ssh-keygen在服务器上生成一个authorize ... [详细]
  • Lodash中文文档(v3.10.1)–“Collection”要领TranslatedbyPeckZegOriginalDocs:Lodashv3.10.1Docs乞助翻译文档的 ... [详细]
  • 接上文http:blog.itpub.net29254281viewspace-1318239领导让开发同学鼓捣一个可配置化的后台.又回到了原来的问题如果要灵活,很多参数要 ... [详细]
  • 如何实现Percona Mysql Galera多读写集群的部署
    本篇文章给大家主要讲的是关于如何实现PerconaMysqlGalera多读写集群的部署的内容,感兴趣的话就一起来看看这篇文章吧,相信看完如何实现PerconaMysq ... [详细]
  • 也就是|单打_.net Core 自我学习随笔——工作的核心:增删改查
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了.netCore自我学习随笔——工作的核心:增删改查相关的知识,希望对你有一定的参考价值。上次介绍了一下如何进行连接 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 集合的遍历方式及其局限性
    本文介绍了Java中集合的遍历方式,重点介绍了for-each语句的用法和优势。同时指出了for-each语句无法引用数组或集合的索引的局限性。通过示例代码展示了for-each语句的使用方法,并提供了改写为for语句版本的方法。 ... [详细]
  • 解决.net项目中未注册“microsoft.ACE.oledb.12.0”提供程序的方法
    在开发.net项目中,通过microsoft.ACE.oledb读取excel文件信息时,报错“未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序”。本文提供了解决这个问题的方法,包括错误描述和代码示例。通过注册提供程序和修改连接字符串,可以成功读取excel文件信息。 ... [详细]
  • 来自Google的前端工程师-PhilipWalton分享了本身关于怎样成为优异的工程师的一些看法。个人感觉很有代价,所以翻译成中文,轻易人人浏览。程度有限,如翻译不妥的地方请在批 ... [详细]
  • 11 微服务网关(一)概念介绍  Zuul简单入门
    11.1服务网关的概念11.1.1什么是微服务网关11.1.2作用和应用场景11.2常见的API网关实现方式11.3基于Nginx的网关实现IP地址映射到路径,统一 ... [详细]
  • Hbase 的伪分布部署、shell基本操作及hbase相关理念
    1,HBase的的的的伪分布式配置-对zookeeper的配置,这个前面配置过,修改zoo.cfg文件,指定zookeeper的主入口-配置的HBase的的:进入optmo ... [详细]
  • 正月十五后第一贴:网页设计素材倾情奉献(附下载源文件)
    昨晚通宵把本该年前完成的项目中,最后两模块搞完.浏览整个系统,可以用惨不忍睹来形容,功能上实现是没问题,不过,页面布局,美化等,就太差的忒多了.于是google之,找到的很少, ... [详细]
author-avatar
鱼鱼de眼泪2012
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有