2014-12-04 5 views
1

Мой сценарий заключается в следующем:Ninject контекстная Связывание во время выполнения в зависимости от конкретного значения

У меня есть интерфейс IVendor. У меня есть три разных класса, реализующих это, давайте назовите их Vendor1, Vendor2, Vendor3.

У меня есть веб-ави, который даст мне доступность продуктов поставщика. Конечно, у каждого поставщика есть свои процедуры проверки доступности, следовательно, интерфейс, который предоставляет метод CheckAvailability.

Так что в моем вызове у меня есть что-то вроде:

public bool Get(int productId) 
{ 
    var product = GetProductByID(productId); 
    switch(product.VendorId) 
    { 
     case 1: 
      return Vendor1(CheckAvailability(product.VendorProductCode)); 
      break; 
     case 2: 
      return Vendor2(CheckAvailability(product.VendorProductCode)); 
      break; 
     case 3: 
      return Vendor3(CheckAvailability(product.VendorProductCode)); 
      break; 
     default: 
      return false; 
      break; 
    } 
} 

Это очень упрощенно и, конечно, я не люблю его. Я хотел бы быть в состоянии назвать что-то вроде

public bool Get(int productId) 
{ 
    var product = GetProductByID(productId); 
    return IVendor.CheckAvailability(product.VendorProductCode) 
} 

и IVendor, который будет введен в то, что необходимо через Ninject. Я спрашиваю что-то сумасшедшее? Возможно ли это?

+1

Вам необходимо использовать завод, который будет реализовывать эту логику. К сожалению, мы еще не достигли уровня, но это можно сделать концептуально. Однако заводская опция будет выполнена на более низком уровне и обеспечит правильную реализацию. – Chris

+0

Можно ли привести пример? –

+0

Я мог бы позже сегодня вечером .. на работе в данный момент – Chris

ответ

0

Посмотрите на это: stackoverflow.com/questions/10285946/ioc-ninject-and-factories. Пожалуйста, отметьте, как было решено, когда вы довольны этим.