2016-11-06 89 views
1

我在我的小型项目中使用了StructureMap。我有一个需要使用StructureMap(Bar)轻松交付的类实例构造的类,但构造函数patameters包含一些事先不知道的参数。使用StructureMap创建具有运行时构造函数参数的对象

class Bar { } 

class Foo 
{ 
    public Foo(string magic, Bar bar) { } 
} 

所以,在我的代码的某个地方,我需要得到的Foo一个实例。在这段代码中,我知道magic的期望值。 我应该如何创建我的Foos?

我现在正在做的是我通常会创建一个工厂,注入​​并使接受运行时已知的东西的方法成为CreateFoo

class FooFactory 
{ 
    private readonly IContainer _container; 

    public FooFactory(IContainer container) 
    { 
     _container = container; 
    } 

    public Foo CreateFoo(string magic) 
    { 
     return _container.With("magic").EqualTo(magic).GetInstance<Foo>(); 
    } 
} 

我注入FooFactory无论我需要有一个新的Foo创建和我的课并不需要知道究竟是怎么做Foo

我知道我可以注入IContext并在没有工厂的情况下创建Foos,但当构建代码变得更复杂并需要复制时,它看起来很臭。

工厂之外还有其他的替代品吗?

+1

更改您的设计。你的应用程序组件[在施工过程中不应该要求运行时数据](https://www.cuttingedge.it/blogs/steven/pivot/entry.php?id=99)。 – Steven

+0

我喜欢这个。它会为我的简单应用程序添加一些“提供程序”和“上下文”,但是...可以创建一个接受我的对象设置的初始化方法吗?我正在制作一个小游戏,需要像spawn posistion,初始对象速度等等。 – user1713059

回答

相关问题