2011-03-31 103 views
0

我正在为我们的一个内部项目创建一个核心库。这个核心库应该包含一些抽象类和泛型类,然后通过专门的项目进行扩展。例如,有一个AbstractPerson类具有Person类的标准属性和方法,而另一个项目将执行Person类,它将从AbstractPerson类继承以添加项目特定的功能。 现在我们需要推动DAL这个通用和专业的项目。由于大多数操作是通用的,所以我想将它们作为Repository类包含在核心库中。但是,Repository类需要访问LINQ dataContext。这是从专门的数据库中产生的。因此,Core库中没有dataContext可用。那么我怎样才能创建一个通用的存储库类为可以驻留在公共库中的通用方法。分层数据上下文和抽象

回答

1

你可以依靠你的DataContexts来实现一个特定的接口(即使只是说“这些集合存在!”)吗?

如果是这样,通过将存储库的上下文设置为构造函数中传入的值,或允许在每个函数调用中传递上下文,只要它实现了,就可以注入要使用的DataContext所需的界面。

public IEnumerable<Person> SearchPersons(IHasPersonsTable context, string searchFilter) 
{ 
    return IHasSomePersonsTable.Persons 
       .Where(p => p.SearchableThing.Contains(searchFilter)); 
} 

这是一个有点漂亮,如果你通过上下文作为参数传递给仓库构造/工厂方法/不管。

+0

感谢Bryan,它看起来不错,我可以使用一些IOC将dC传递给每个respository的构造函数。由于项目是内部的,所以我们可以施加界面限制。让我试一试 – Gripsoft 2011-04-01 15:52:51