我正在为我们的一个内部项目创建一个核心库。这个核心库应该包含一些抽象类和泛型类,然后由专门的项目进行扩展。例如,有一个 AbstractPerson 类,其中包含Person类的标准属性和方法,而另一个项目将实现一个 Person 类,该类将从AbstractPerson类继承以添加项目特定的功能。 现在我们需要为这个常见的专业项目推动 DAL 。由于大多数操作都是通用的,所以我想将它们作为Repository类包含在核心库中。但是,Repository类需要访问LINQ dataContext。这是从专业数据库生成的。因此,Core库中没有可用的dataContext。那么我怎样才能为可以驻留在公共库中的泛型方法创建公共存储库类。
答案 0 :(得分:1)
你能依靠你的DataContexts来实现一个特定的界面(即使只是说“这些集合存在!”)?
如果是这样,通过将存储库的上下文设置为在构造函数中传递的值,或允许在每个函数调用中传递上下文,您可以注入要使用的DataContext,只要它实现了所需的界面。
public IEnumerable<Person> SearchPersons(IHasPersonsTable context, string searchFilter)
{
return IHasSomePersonsTable.Persons
.Where(p => p.SearchableThing.Contains(searchFilter));
}
如果将上下文作为参数传递给存储库构造函数/工厂方法/等等,这会更漂亮。