StructureMap单例用法(一个实现两个接口的类)

36 c# structuremap singleton

public interface IInterface1
{
}

public interface IInterface2
{
}

public class MyClass : IInterface1, IInterface2
{
}

...

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

var x = ObjectFactory.GetInstance<IInterface1>();
var y = ObjectFactory.GetInstance<IInterface2>();
Run Code Online (Sandbox Code Playgroud)

我用上面的代码得到了两个不同的MyClass实例.我该怎么办?

Jos*_*gan 53

您可以使用Forward <,>()注册告诉StructureMap使用不同类型的分辨率来解析类型.这应该做你期望的:

ObjectFactory.Initialize(x =>
{
    x.For<IInterface1>().Singleton().Use<MyClass>();
    x.Forward<IInterface1, IInterface2>();
});
Run Code Online (Sandbox Code Playgroud)


Chr*_*sic 13

我将注册MyClass本身,然后将其从上下文中拉出各个接口的Use语句.

ForSingletonOf<MyClass>().Use<MyClass>();

For<IInterface1>().Use(ctx => ctx.GetInstance<MyClass>());
For<IInterface2>().Use(ctx => ctx.GetInstance<MyClass>());
Run Code Online (Sandbox Code Playgroud)

  • @andyhammer您可能已经交换了两个界面.FROM是第一,TO是第二.我犯了这个错误......很好的解决方案,我认为我的设计不好而且不可能,但我猜其他人也有同样的问题,谢天谢地. (3认同)
  • 这对我有用!“x.Forward”方法不起作用,我的代码无法解析 IInterface2。 (2认同)