StructureMap的Forward<T,U>功能在Lamar中是否有替代实现?
Lamar对StructureMap
Forward<,>功能的支持 当然支持!Lamar作为StructureMap的继任者,完全保留了这种“将单个具体实例映射到多个接口”的能力,只是写法上有一点点调整,更贴合Lamar的链式配置风格。
对应实现代码
你可以用两种方式实现和原StructureMap代码完全一致的效果:
方式1:独立配置Forward
和你原来的StructureMap写法最接近:
var container = new Container(_ => { // 将StatefulCache注册为单例 _.For<StatefulCache>().Singleton(); // 把IReader和IWriter转发到StatefulCache的单例实例 _.Forward<StatefulCache, IReader>(); _.Forward<StatefulCache, IWriter>(); }); // 验证实例一致性 container.GetInstance<IReader>().ShouldBeOfType<StatefulCache>(); container.GetInstance<IWriter>().ShouldBeOfType<StatefulCache>();
方式2:链式配置(更简洁)
Lamar支持在具体类型的配置链中直接添加Forward规则,代码更紧凑:
var container = new Container(_ => { _.ForConcreteType<StatefulCache>() .Configure.Singleton() .Forward<IReader>() .Forward<IWriter>(); }); // 同样的验证逻辑 container.GetInstance<IReader>().ShouldBeOfType<StatefulCache>(); container.GetInstance<IWriter>().ShouldBeOfType<StatefulCache>();
效果说明
两种写法都会让Lamar在解析IReader或IWriter时,返回同一个StatefulCache单例实例,和你原来在StructureMap中的行为完全一致。
内容的提问来源于stack exchange,提问作者soren.enemaerke
相关产品推荐
相关产品推荐

