2013-10-15 54 views
3

我可以添加一個命名實例structuremap這樣的:結構圖 - 如何獲得命名實例並在運行時傳遞參數?

For<IFoo>().Add<Foo>().Named("FooOne"); 

,我就可以用得到:

ObjectFactory.GetNamedInstance<IFoo>("FooOne"); 

,我可以通過註冊這樣在運行時傳遞參數:

For<IFoo>().Add<Foo>().Ctor<string>("someParam"); 

並得到這樣的一個實例:

ObjectFactory.With("someParam").EqualTo("blah").GetInstance<IFoo>(); 

一切都好。但我想有一個命名實例並傳遞給它一個參數。所以我註冊這樣的:

For<IFoo>().Add<Foo>().Named("FooOne").Ctor<string>("someParam"); 

但我不能工作了用於獲取命名實例並將其傳遞的參數在運行時的語法? 我試圖做這樣的事情:

ObjectFactory.With("someParam").EqualTo("blah").GetNamedInstance<IFoo>("FooOne"); 

但structuremap不給我的選項GetNamedInstance添加參數後。我哪裏錯了?

替代方法的建議也會很好。基本上我想要做的是註冊一個枚舉的每個元素的具體類型,並使用枚舉項來命名它並按名稱檢索它。但我需要能夠在運行時將參數傳遞給構造函數。

在此先感謝。

回答

3

StructureMap不提供這樣做的API。

您可以使用抽象工廠。 Stack Overflow中有很多例子可以在這裏找到。其中一些是this onethat one

+0

感謝 - 這看起來像我需要什麼 – soupy1976

0

您可以使用

var args = new ExplicitArguments(); 
args.SetArg("someParam", blah); 
ObjectFactory.Container.GetInstance<IFoo>(args, "FooOne"); 
相關問題