[英]use Castle windsor to create an object instead of a factory class
好的,所以我有一个基本类型:
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将需要是一个接口,产品将实现该接口,但是然后我需要通过windsor中的枚举开关来使它们成为接口吗?
帮助和指针(链接)表示赞赏。 这是在MVC.net 3项目中,我为控制器和日志记录设置了windsor设置,尽管我对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;
}
}
还有其他建议吗?
如何使用这样的东西:
public class ProductFactory
{
public T Create<T>() where T : ProductBase, new()
{
return new T();
}
}
但是我认为您的问题与依赖注射无关。
编辑:如果您需要使用城堡进行产品创建,则可以使用如下所示的内容:
public interface IProductFactory
{
T Create<T>() where T : ProductBase, new();
void Destroy(ProductBase obj)
}
public class ProductFactory : IProductFactory
{
private readonly WindsorContainer _container;
public ProductFactory(WindsorContainer container)
{
_container = container;
}
public T Create<T>() where T : ProductBase, new()
{
return _container.Resolve<T>();
}
public void Destroy(ProductBase obj)
{
_container.Release(obj);
}
}
您需要向ProductFactory注册IProductFactory,它应该可以工作。 抱歉,如果它们是代码中的一些错误,但我现在没有Visual Studio可以对其进行测试。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.