StructureMap: 如何为所有接口注册相同的实例

7

StructureMap 新手问题。

public class SomeClass: IInterface1, IInterface2 {
}

我希望以下测试能够通过:
Assert.AreSameInstance(
    container.GetInstance<IInterface1>(), 
    container.GetInstance<IInterface2>());

我该如何进行显式注册?
在Castle Windsor中,我知道可以这样做:
kernel.Register(Component.For(typeof(IInterface1), typeof(IInterface2))
    .ImplementedBy(typeof(SomeClass));

但我没有看到任何等效的API


你能不能直接告诉它将它们实例化为单例模式? - Jaxidian
嗯...是的,但如何获取相同的单例实例来实现每个接口呢?明确一点,只应该实例化一个SomeClass实例。 - George Mauer
除了正确的语法之外,我期望像这样:x.For<IInterface1>().Use<SomeClass>(); x.For<IInterface2>().Use<SomeClass>(); x.For<SomeClass>().Singleton().Use<SomeClass>();。我知道这似乎有点冗余,但我相信这就是你要做的。 - Jaxidian
抱歉Jax,那不是正确的方法 - 我刚试过了,它不起作用。无论如何,这将会从容器中公开三个服务,而我只需要公开两个。无论哪种方式,都行不通。 - George Mauer
抱歉,这是我能为您提供的最好帮助。我会点赞您的帖子,希望您能从其他人那里获得更好的帮助。很抱歉! - Jaxidian
显示剩余2条评论
1个回答

15
ObjectFactory.Initialize(x => 
{ 
    x.For<IInterface1>().Singleton().Use<MyClass>(); 
    x.Forward<IInterface1, IInterface2>(); 
}); 

提示:如果这对你不起作用,请确保你正确地使用了Forward()的两个类型参数。我曾经因为假设它是“备用”插件类型而被卡住了。 - Jack Ukleja

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接