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

时间:2010-03-02 13:43:24

标签: c# singleton structuremap

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>();

我使用上面的代码获得了两个不同的MyClass实例。我怎么才能得到一个?

4 个答案:

答案 0 :(得分:52)

您可以使用Forward&lt;,&gt;()注册告诉StructureMap使用其他类型的分辨率解析类型。这应该符合您的期望:

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

答案 1 :(得分:13)

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

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

For<IInterface1>().Use(ctx => ctx.GetInstance<MyClass>());
For<IInterface2>().Use(ctx => ctx.GetInstance<MyClass>());

答案 2 :(得分:1)

尝试查看使用的不同重载,尤其是Func重载。从那里,您可以了解StructureMap应如何使用已注册的另一个对象创建您的实例。

答案 3 :(得分:-4)

ObjectFactory 打算来创建多个实例。如果你想要一个单例,那就写一个单例类(可能有公共IInterface1IInterface2属性作为访问者)。

似乎有粗略记录,但也许您可以使用Container代替。