【发布时间】:2016-01-11 13:34:21
【问题描述】:
我有这个工厂:
public static class ClassFactory
{
public static IEnumHereClass CreateClass(EnumHere type)
{
switch (type)
{
case EnumHere.First:
return new EnumHereFirstClass();
case EnumHere.Second:
return new EnumHereSecondClass();
default:
throw new NotSupportedException();
}
}
}
看起来不错。但我在这里看到了问题:我不能使用 IoC 容器(例如统一)注入它,也不能模拟它。我想进行这些更改(使用接口注入并删除 static):
public class ClassFactory : IClassFactory
{
public IEnumHereClass CreateClass(EnumHere type)
{
switch (type)
{
case EnumHere.First:
return new EnumHereFirstClass();
case EnumHere.Second:
return new EnumHereSecondClass();
default:
throw new NotSupportedException();
}
}
}
你怎么看?
【问题讨论】:
-
您的具体问题是什么?
-
是否使用静态工厂?您在我的代码中看到了什么缺点或误解?
-
备案,using a switch case statement inside of an abstract factory is a code smell表示设计有问题。此外,使用
Enum指定类型是一种不好的做法,因为这意味着当枚举类型发生更改时,您需要更改多个类。
标签: c# dependency-injection factory