StructureMap用于命名实例场景的注册表DSL

时间:2011-06-03 15:18:24

标签: .net structuremap

我有一个场景,我需要能够从StructureMap获得两个不同的接口IObjectContext实现。我知道使用命名实例是答案,但我遇到了DSL问题,因为“使用”的类在每种情况下都是相同的,但是使用不同的构造函数参数。

因此,在StructureMap之外创建这些对象的方法如下:

IObjectContext context1 = new ObjectContextAdapter(new Model1Entities());
IObjectContext context2 = new ObjectContextAdapter(new Model2Entities());

如何在StructureMap Registry DSL中表达此配置?我知道我需要使用命名实例,但我不能理解其余的语法。

感谢!!!

2 个答案:

答案 0 :(得分:1)

我们最近在尝试注册同一具体类型的多个命名实例时遇到了类似的问题(在我们的例子中,这是在自定义扫描程序中) - Structuremap不允许您直接执行此操作。

最后我们不得不使用ConstructedBy方法,传入一个明确实例化具体类型的表达式。

值得在这里StructureMap - Configuring Instances作为起点。

编辑: 我认为这是你在注册表中可能想要的东西(感谢PHeiberg的Add()建议):

For<IObjectContext>().Add(() => new ObjectContextAdapter(new Model1Entities())).Named("objectContext1");
For<IObjectContext>().Add(() => new ObjectContextAdapter(new Model2Entities())).Named("objectContext2");

答案 1 :(得分:0)

在您的情况下,它可能不是一个好的解决方案,但您可以为每个模型实体实例创建一个独立的适配器类。这使事实清楚,对象不一样。您可以轻松地从同一个基类派生两者,以使实现变得非常容易。