StructureMap singleton usage(一个实现两个接口的类)
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实例。 我怎样才能得到一个?
您可以使用Forward <,>()注册来告诉StructureMap使用不同types的分辨率来parsingtypes。 这应该做你所期望的:
ObjectFactory.Initialize(x => { x.For<IInterface1>().Singleton().Use<MyClass>(); x.Forward<IInterface1, IInterface2>(); });
我将注册MyClass本身,然后将其从各个接口的Use语句的上下文中提取出来。
ForSingletonOf<MyClass>().Use<MyClass>(); For<IInterface1>().Use(ctx => ctx.GetInstance<MyClass>()); For<IInterface2>().Use(ctx => ctx.GetInstance<MyClass>());
尝试看看使用不同的重载,特别是Func重载。 从那里你可以知道StructureMap应该如何创build你的实例,而另一个对象已经被注册了。
一个ObjectFactory
旨在创build多个实例。 如果你想要一个单例,写一个单例类(也许使用public IInterface1
和IInterface2
属性作为访问器)。
看起来有些粗略logging,但是也许你可以使用Container来代替。