使用存储库模式创建对象的新实例的正确方法是什么?

时间:2011-01-05 11:59:48

标签: c# repository design-patterns

我一直在使用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

这对我来说都是新手,所以我可能会遗漏一些明显的东西!

任何帮助都将不胜感激。

3 个答案:

答案 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