хорошо, поэтому у меня есть базовый тип:
ProductBase
, а затем у меня есть несколько продуктов:
Product1: ProductBase
Product2: ProductBase
Product3: ProductBase
Затем заводской класс:
public class productFactory
{
public productBase GetProduct(Enums.product buildProduct)
{
var outProduct = new ProductBase();
switch (buildProduct)
{
case Enums.Products.Product1:
outMis = new Product1();
break;
case Enums.Products.Product2:
outMis = new Product2();
break;
default:
outMis = new Product1();
break;
}
return outProduct;
}
}
Я знаю, что Виндзор может это сделать, я знаю, что это хорошо.
Насколько я вижу, productBase должен быть интерфейсом с продуктами, реализующими его, но тогда мне нужно сделать их через переключатель enum в windsor?
Справка и указатели (ссылки) ценится.Это в проекте MVC.net 3, и у меня есть виндзорная настройка для контроллеров и логирования, так что этот бит я получаю - хотя, очевидно, огромный пробел в моем понимании IoC и DI!
Один из способов сделать этоэто вместо продукта ProductFactory
собираюсь ответить на мой собственный вопрос - отсюда: http://codeblitz.wordpress.com/2009/05/06/using-factory-method-pattern-with-systemactivator/
вместо использования productFactory:
public class productFactory
{
public static MisProduct CreateProduct(Enums.Product productType)
{
string assemblyName = Assembly.GetExecutingAssembly().GetName().Name;
//creates an instance based on the enum name
ProductBase myProduct = Activator.CreateInstance(
null,
string.Format("{0}.Models.Products.{1}", assemblyName, productType)
).Unwrap() as ProductBase;
if (myProduct == null)
{
//todo throw an Exception here.
}
return myProduct;
}
}
большекто-нибудь предложения?