好的,所以我有一个基本类型:
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;
}
}
还有其他建议吗?
最佳答案
我建议你Typed Factory
您可以通过id或类型本身来解析所需的具体类型,这取决于您如何接收有助于做出具体选择的参数。
根据您的示例,枚举数可能与组件ID有关。
关于c# - 使用CaSTLe Windsor创建对象而不是工厂类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9376323/