使用StructureMap的简单工厂

时间:2009-08-05 14:12:57

标签: c# .net dependency-injection inversion-of-control structuremap

也在结构图组上发布了这个。我们上周刚刚开始使用结构图,并且正在挖掘它。


我确定我错过了一些简单的事情。

我正在尝试模仿以下代码,在我的工厂中使用SM。 我没有在工厂类中拥有容器依赖项。该 这个帖子的共识似乎是这是正确的 方法:http://www.codeplex.com/unity/Thread/View.aspx?ThreadId=29697。 如果有更好的方法,我愿意听取其他方式 完成这个。

基本上我工厂的Create方法将采用枚举值(它 可能是一个实际类型,但无论哪种方式,它都不受控制 由容器),并应返回正确的实例。注意 返回类型将由SM管理。我不想把所有的 因为可能有很多(!),所以在工厂的Ctor中有相关性。

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 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

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