我一直在使用c#和.net。
来处理存储库模式我的问题是关于创建someRepositoryObject
的新实例。到目前为止我见过的所有例子都是这样的:
using(ISomeRepository someRepository = new SomeRepository().getRepository())
{
IsomeRepositoryObject repObj = new someRepositoryObject();
}
不调用new someRepositoryObject
首先删除使用接口的点吗?做这样的事情会更好吗
using(ISomeRepository someRepository = new SomeRepository().getRepository())
{
IsomeRepositoryObject repObj = someRepository.NewsomeRepositoryObject();
}
因此,存储库本身返回所需对象的新实例,并且调用代码不知道传递给它的类,只是它的类型为ISomeRepositoryObject
。
这对我来说都是新手,所以我可能会遗漏一些明显的东西!
任何帮助都将不胜感激。
答案 0 :(得分:0)
我会使用IOC容器来提供帮助。
Ninject是一个很好的解决方案。例如,在我的MVC程序中,我的所有控制器都需要一些服务:
public class SampleController: Controller {
public SampleController(IService service) {}
}
IService由Ninject注入,只有global.asax.cs需要确认具体类。
答案 1 :(得分:0)
通常我使用您描述的第二种方式,让存储库创建一个新实例。原因是 - 正如您所提到的那样 - 我正在尝试将接口的实现与使用存储库的代码分开。
答案 2 :(得分:0)
您刚才描述的是抽象工厂模式。 在存储库的情况下,最好使用IoC容器来创建新对象。在这种情况下,您根本不会使用new关键字,您将只使用抽象。 Repository by Martin Fowler