代码之家  ›  专栏  ›  技术社区  ›  Phil Sandler

使用StructureMap的简单工厂

  •  2
  • Phil Sandler  · 技术社区  · 15 年前


    我肯定我错过了一些简单的东西。

    我试图在我的工厂中使用SM来模拟以下代码。 我同意在工厂类中使用容器依赖项。这个 这条线索的共识似乎是这是正确的 方法: http://www.codeplex.com/unity/Thread/View.aspx?ThreadId=29697 . 如果有更好的方法,我愿意听到其他的方法 做到这一点。

    基本上,我工厂的Create方法将接受一个枚举值(它 可能是一个实际的类型,但无论如何它都不是受控的 并应返回正确的实例。注意

    public class PreSaveActionFactory : IPreSaveActionFactory 
    { 
        public IPreSaveAction Create(MyEnumType enumType) 
        { 
            IPreSaveAction action; 
    
            switch (enumType) 
            { 
                case MyEnumType.Value1: 
                    //imagine this has 3 Ctor arguments 
                    action = new Value1PreSaveAction(); 
                    break; 
                case MyEnumType.Value2: 
                    //and imagine this has 4 completely different Ctor arguments 
                    action = new Value2PreSaveAction(); 
                    break; 
                default: 
                    throw new NotSupportedException(); 
            } 
    
            return action; 
        } 
    } 
    

    我可以链接到文档的右侧部分,您不需要这样做 为我写代码(尽管我不会抱怨:))。我想

    2 回复  |  直到 11 年前
        1
  •  3
  •   Wyatt Barnett    15 年前

    我从未尝试过这种方法,但您可以使用.WithName()方法提供实例名,然后通过ObjectFactory.GetNamedInstance()获取实例。

    另一种方法(我已经成功地使用过)是创建一个字典,它充当类型映射。在那里查找类型,然后通过ObjectFactory获取该类型的实例。

        2
  •  0
  •   Chris Missal    15 年前

    至于注册,我想你会想用 Conditional Object Construction .