我在我的小型項目中使用了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