我在我的小型项目中使用了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,但当构建代码变得更复杂并需要复制时,它看起来很臭。
工厂之外还有其他的替代品吗?
更改您的设计。你的应用程序组件[在施工过程中不应该要求运行时数据](https://www.cuttingedge.it/blogs/steven/pivot/entry.php?id=99)。 – Steven
我喜欢这个。它会为我的简单应用程序添加一些“提供程序”和“上下文”,但是...可以创建一个接受我的对象设置的初始化方法吗?我正在制作一个小游戏,需要像spawn posistion,初始对象速度等等。 – user1713059