我已经实现了一个不知道持久性的存储库模式。存储库实现仅与我的实体对象IUnitOfWork
和ITable<T>
接口交互。目的是IUnitOfWork
不重用,而是代表单个事务。到目前为止,我已经实现了 in-memory 以及 Linq-to-Sql 的IUnitOfWork
and版本ITable<T>
。
我的问题是,由于IUnitOfWork
注入到存储库中,我最终需要知道如何IUnitOfWork
在使用存储库的地方实例化一个新的。由于这是应该可以插入的主要部分,所以感觉就像我做错了什么。一般的使用模式是这样的:
FooUnitOfWork unitOfWork = new FooUnitOfWork();
Repository repos = new Repository(unitOfWork);
// ...act upon repos
unitOfWork.Save();
现在看来,我需要一些其他模式来允许应用程序中的每个存储库使用来获得正确的工作单元(例如内存中、L2S 等)。
最适合这个的模式是什么?我看过福勒关于这个话题的讨论,但他的例子似乎都不是完全合适的。我已经觉得我拥有的抽象量比我想要的要多,所以构建另一个间接性似乎过度了。
目前,我倾向于某种应用程序范围的提供程序,它可以配置为生成正确的IUnitOfWork
. 我是偏离基地还是这是真正实现不可知论所需要的?