我首先为我的每个实体创建了一个新的存储库接口,例如IClientRepository。 然后我为每个实体创建了一个类,例如SqlClientRepository。 我为很多实体做了这个,然后意识到他们都有相同的方法:添加,更新,删除,GetAll。

所以我意识到我应该只创建一个界面,而不是为每个界面分别创建一个界面。

问题是现在我的依赖注入不起作用,因为我只能将接口映射到一个存储库:

Bind<IClientRepository>().To<SqlClientsRepository>().WithConstructorArgument("connectionString", WebConfigurationManager.ConnectionStrings["MyDb"].ConnectionString);

我能看到的唯一解决方法是组合所有存储库或者回到我的第一次尝试。 使用第一次尝试还允许我更改某些实体的返回类型,例如IClientRepository.Add()可以返回新客户端的id,而其他一些实体可能不需要它。

欣赏任何想法。

===============>>#1 票数:2 已采纳

您可以让ClientRepository同时实现BaseRepository 特定的IClientRepository。 这样你的Base可以有通常的Add / Remove等,你的IClientRepository可以有专门的方法(或者在某些情况下可能是空的)。 您的IoC可以使用您的IClientRepository解决。

我就是这样做的:

public class CustomerRepository : BaseRepository<Customer>, ICustomerRepository {...}
and
unityContainer.RegisterType<ICustomerRepository, CustomerRepository>();

祝好运 :)

===============>>#2 票数:0

存储库的一种常见方法是使用所有存储库可以使用的常见CRUD方法或方法创建类似“IRepository”的基本接口。 然后,对于每个特定存储库,创建一个从基本接口派生的新接口,但包括该存储库的特定于域的方法。 对于基本Repository实现和更具体的实现类,可以做同样的事情。 通过这种方式,您可以使用通用功能,但是每个具体的特定于域的存储库实现仍然具有特定的接口。

===============>>#3 票数:0

如果不知道你想要完成什么,很难肯定地说。 在我的最新项目中,每个类有一个存储库, IRepository<T> 这可能会让你摆脱你的IoC绑定问题。

===============>>#4 票数:0

一种解决方案是使接口通用 通过这种方式,它足够通用,同时仍然具有灵活性。

  ask by Joe translate from so

未解决问题?本站智能推荐:

2回复

如何用存储库模式问题解决这个泛型?

我从上一个问题获得了此代码,但它没有编译: 但是在这两行中: 1-公共类存储库:IRepository 2-公共类CustomerRepository:Repository,ICustomerRepository 它给了我这个错误:使用泛型类型'TestApplicat
2回复

用存储库模式查询

我有以下数据库模型: 我使用Linq-to-SQL和Design Pattern Repository来描述下面的页面http://www.remondo.net/repository-pattern-example-csharp/ 这是一个类图: 我想进行这样的查询,但改为使
3回复

DI和存储库模式

目前,我的代码与此类似(缩短只是为了说明一点): DAL 存储库接口 基本EF存储库 基本存储库的示例实现 BLL 现在,一切都很好。 我可以简单地做这样的事情: 当我阅读这篇博文时,混乱开始,作者说使用如下代码: 是一种糟糕的技术,
2回复

存储库模式实施经验

我准备开始一个新的asp.net Web项目,并且要使用LINQ-to-SQL。 我已经完成了一些工作,使用Mike Hadlow发现的一些信息来设置数据层,该信息使用接口和泛型为数据库中的每个表创建一个存储库。 我一开始认为这是一种有趣的方法。 但是,现在我认为创建一个基本的Reposi
1回复

存储库模式中的可重用模型

我最近遇到了具有多个应该可交换的数据库类型的问题。 我的解决方案是存储库模式。 拥有这样的模型。 将这两个类作为我的模型。 以及我的存储库中的以下方法。 现在我遇到了一些问题。 首先是使用像这样的存储库。 如果我尝试访问作者模型中的书籍,我会得到一个ObjectD
1回复

工作单元和存储库模式

我使用NHibernate设置了存储库模式。 基类如下所示: 如您所见,我允许通过构造函数(使用StructureMap)填充工作单元。 我正在填充ASP.NET Web服务上的存储库对象,如下所示: 正如你可以推断的那样,我的问题是,通过设计,我现在已经失去了对工作单元生命
1回复

有存储库模式的DAL和没有存储库模式的DAL的区别?

一段时间以前,我开始将EF用作DAL,并从教程和视频中了解了存储库模式和工作单元模式。 关于存储库,我了解到它是DAL的抽象,它将业务逻辑与数据访问代码分开。 另外,它避免了数据访问代码的声誉,并有助于单元测试。 我知道存储库模式是制作DAL的一种特殊方法。 但是会带来什么呢?
2回复

存储库模式,UoW模式,普通NHibernate会话

关于Repository pattern ( UoW pattern使用的讨论很多。 我很了解何时以及为何使用Repository pattern 。 假设我有几个聚合根。 下一步是什么? 我更喜欢哪种模式/实现? 为什么使用比普通NHibernate Session更复杂的解决方案的
1回复

存储库模式,观察者模式 - 实例[关闭]

我正在努力成为一名更好的C#程序员并使用最佳实践设计模式。 有人可以解释如何最好地使用存储库模式和观察者模式在代码中处理以下真实示例吗? 我有一个包含公司的系统。 公司有部门和员工。 此外,每家公司都支付订阅费用,这限制了他们可以创建的部门/员工数量。 如果没有至少一个部门,您
2回复

必须在“存储库模式”中创建多少个存储库接口?

假设我们有以下课程: 具有以上模型,我是否应该仅创建一个存储库,例如: 或者最好有多个存储库: 每个优点和缺点是什么?