【问题标题】:Inject factory using interface使用接口注入工厂
【发布时间】: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();
        }
    }
}

你怎么看?

【问题讨论】:

标签: c# dependency-injection factory


【解决方案1】:

看看Abstract Factory Pattern

意图

Abstract Factory 提供了用于创建一系列相关对象的接口,而无需明确指定它们的类。


我看到这个问题之前被标记为,现在被标记为。不要与抽象工厂混淆。

【讨论】:

  • 我知道抽象工厂,但我没有“相关对象系列”。我只想根据传递的枚举值创建对象实例。
  • 你提到了 IOC 容器,这让我觉得你有 2 组或更多不同的类要构建。为给定集合实例化适当的工厂 - 我也想像 enum 那样 - 然后调用该工厂,如 OP 中所示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-12
  • 1970-01-01
  • 1970-01-01
  • 2020-01-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多