结构图 - 如何在运行时获取命名实例并传递参数?

时间:2013-10-15 12:12:37

标签: c# 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的选项。我哪里错了?

替代方法建议也会很好。基本上我要做的是为枚举的每个元素注册一个具体的类型,并使用枚举项来命名它并按名称检索它。但我需要能够在运行时将参数传递给构造函数。

提前致谢。

2 个答案:

答案 0 :(得分:3)

StructureMap没有为此提供API。

您可以使用抽象工厂。在Stack Overflow上可以找到很多例子。

其中一些是this onethat one

答案 1 :(得分:1)

您可以使用

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