4

我可以像这样将命名实例添加到结构映射中:

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 的选项。我哪里错了?

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

提前致谢。

4

2 回答 2

3

StructureMap 没有为此提供 API。

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

其中有几个是这个那个

于 2013-11-07T23:07:07.370 回答
1

您可以使用

var args = new ExplicitArguments();
args.SetArg("someParam", blah);
ObjectFactory.Container.GetInstance<IFoo>(args, "FooOne");
于 2014-12-11T21:52:42.913 回答