gpt4 book ai didi

c# - 使用 CaSTLe windsor 创建对象而不是工厂类

转载 作者:太空宇宙 更新时间:2023-11-03 14:05:45 25 4
gpt4 key购买 nike

好的,我有一个基本类型:

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 需要是一个接口(interface),产品实现它,但我需要通过 windsor 中的枚举开关来制作它们?

感谢帮助和指点(链接)。这是在一个 MVC.net 3 项目中,我为 Controller 和日志记录设置了 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com