2015-06-25 4 views
2

Я пытаюсь использовать Generic Abstract Factory в C#Внедрение Generic Abstract Factory

Я следуя этому примеру: http://www.codeproject.com/Articles/21043/Generic-Abstract-Factory

У меня есть 2 вопроса.

Первое: Dependency Injection (я использую Unity)

public class ClientFactory 
{ 
    private readonly IFactory<Car> _carFactory; 

    public ClientFactory(IFactory<Car> carFactory) 
    { 
     _carFactory = carFactory; 
    } 
} 

И я называю это так:

var client = new ClientFactory(new Car()); //(this is what the IoC does) 

Теперь, чтобы иметь возможность придать fakeCar я это сделал:

public class CarFake : IFactory<Car> 
{ 
    public TProduct Build<TProduct>() where TProduct : IProduct<Car>, new() 
    { 
     Console.WriteLine("Creating FakeCar: " + typeof(TProduct)); 
     return new TProduct(); 
    } 
} 

Таким образом, его можно назвать:

var client = new ClientFactory(new CarFake()); Is this ok? 

Второй вопрос:

Как передать параметры для конкретных продуктов (параметры конструктора), позволяет сказать Honda(long id, string model), я хотел бы сказать:

IProduct<Car> carProducta = _carFactory.Build< Honda(Id:1,Model:"Civic") >(); 

Спасибо большое заранее для вашей помощи.

+0

Я не понимаю, почему вы переходите в «новый автомобиль()» на автомобильный завод, если только «Автомобиль» * не является фабрикой? –

+0

Код в этой статье добавляет слишком много ненужного осложнения для чего-то довольно простого. Практически бессмысленно использовать этот шаблон вообще, если вы правильно используете свою инфраструктуру DI. – Jedediah

+0

«Generic Abstract Factory» - звучит как контейнер «ninject» IOC. Зачем изобретать? –

ответ

0

Если вы хотите использовать дженерики для реализации, тогда сделайте это в конкретных продуктах. Это может помочь http://www.dofactory.com/net/abstract-factory-design-pattern

В теории вам понадобится шаблон Builder, который будет существовать при реализации ваших конкретных заводов.