ASP.NET MVC Pattern - Как использовать два отдельных репозитория в контроллере (используя DI) - PullRequest
2 голосов
/ 23 апреля 2011

У меня есть две очень простые таблицы.Product и ProductCategory (ProductCategory похожа на таблицу поиска для Product).На моем контроллере для моего метода Index () я хочу перечислить категории продуктов.Когда пользователь нажимает на категорию, я хочу передать свою категорию в свой метод List (), чтобы показать все продукты определенной категории.

Я использую встроенную структуру DI;У меня сейчас что-то вроде этогоЯ использую два отдельных хранилища в контроллере?Я бы предпочел не передавать их через контроллер.

Примечание: Product и ProductCategory не считаются совокупными.

1 Ответ

4 голосов
/ 23 апреля 2011

Как я упоминал ранее, сервисный уровень поможет вам решить эту проблему.Сервисный уровень является точкой контракта между пользовательским интерфейсом и промежуточным уровнем.Это может быть служба WCF или простая реализация службы, которую я покажу ниже.

public interface IMyProductService 
{
   IList<Product> GetProducts();
   IList<Product> GetProductsByCategory();
   IList<Category> GetCategories();
}

public class MyProductService : IMyProductService
{
   IProductRepository _prodRepo;
   IProductCategoryRepository _catRepo;

   public MyProductService(IProductRepository prodRepo, IProductCategoryRepository catRepo)
   {
      _prodRepo = prodRepo;
      _catRepo = catRepo;
   }

   // The rest of IMyProductService Implementation
}

Ваш контроллер MVC будет иметь ссылку на IMyProductService, вероятно, использующую внедрение конструктора с выбранной платформой DI.

...