访问多个表的存储库

时间:2011-10-10 13:19:08

标签: c#-4.0 architecture service repository-pattern

此模型已简化,仅用于演示。

在我的申请中得到:

数据

public class Product
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public Category Category { get; set; }
}

public class Category
{
    public Guid Id { get; set; }
    public string Name { get; set; }
}

存储库

public interface IRepository<T>
    where T : class
{
    T Add(T entity);
    T Remove(T entity);
    IQueryable<T> GetAll();
    int Save();
}

public class ProductRepository : IRepository<Product>
{
    public Product Add(Product entity) { ... }
    public Product Remove(Product entity) { ... }
    public IQueryable<Product> GetAll() { ... }
    public int Save() { ... }
}

public class CategoryRepository : IRepository<Category>
{
    public Category Add(Category entity) { ... }
    public Category Remove(Category entity) { ... }
    public IQueryable<Category> GetAll() { ... }
    public int Save() { ... }
}

服务

public interface ICategoryService
{
    Category Add(Guid gidProduct, Category category);
}

public class CategoryService : ICategoryService
{
    public Category Add(Guid gidProduct, Category category){ ... } //Problem here

    readonly IRepository<Category> _repository;

    public CategoryService(IRepository<Category> repository)  //Problem here
    {
        _repository = repository;
    }
}

当我需要来自我服务中另一个存储库的信息时,每个类都有一个存储库,我该怎么办?

在上面的示例中,在我的服务层中,我有一个方法Add一个产品(我找到了它的代码)和一个category

问题是我在产品存储库中进行搜索以恢复它,但在我的服务类类别中,没有产品存储库。,如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

首先,您需要为每个聚合根创建一个存储库,而不是为每个类创建一个存储库。

如果您需要访问服务中的多个存储库,只需依赖所有存储库,然后就可以将它们作为参数添加到构造函数中以进行依赖注入。

public CategoryService(CategoryRepository  categoryRepository, ProductRepository productRepository) 
{
    _categoryRepository = categoryRepository;
    _productRepository = productRepository;
}