2016-11-06 112 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

回答

相關問題