2

也将其发布在结构图组上。我们上周才开始使用结构图,并且正在深入研究它。


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

我正在尝试在我的工厂中使用 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; 
    } 
} 

我链接到文档的正确部分很好,您不需要为我编写代码(尽管我不会抱怨:))。我想知道工厂长什么样,还有注册码。

4

2 回答 2

3

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

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

于 2009-08-05T14:35:08.353 回答
0

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

于 2009-08-05T16:02:37.513 回答