c# – 我可以让StructureMap管理具体类型的生命周期吗?
发布时间:2020-12-15 21:48:37 所属栏目:百科 来源:网络整理
导读:我有一个名为TypeA的类型. TypeA实现了2个接口:IOne和ITwo public class TypeA : IOne,ITwo{ public TypeA(IThree ithree) { ... }} 我想配置StructureMap,以便每个线程只有一个TypeA实例.我希望EITHER IOne或ITwo的任何解析都返回TypeA的相同实例(每个线程
我有一个名为TypeA的类型.
TypeA实现了2个接口:IOne和ITwo public class TypeA : IOne,ITwo { public TypeA(IThree ithree) { ... } } 我想配置StructureMap,以便每个线程只有一个TypeA实例.我希望EITHER IOne或ITwo的任何解析都返回TypeA的相同实例(每个线程一个). 我试过以下配置: ObjectFactory.Configure(x => { var thread = Lifecycles.GetLifecycle(InstanceScope.ThreadLocal); x.For<TypeA>().LifecycleIs(thread).Use<TypeA>(); x.For<IOne>().LifecycleIs(thread).Use<TypeA>(); x.For<ITwo>().LifecycleIs(thread).Use<TypeA>(); x.For<IThree>().LifecycleIs(thread).Use<TypeB>(); }); 然后像这样解决 var test = ObjectFactory.GetInstance<IOne>(); var test2 = ObjectFactory.GetInstance<ITwo>(); 但这两个调用解析为不同的对象. 首先,我正在尝试使用StructureMap实现什么? 解决方法For<IOne>().LifecycleIs(thread).Use<Impl>(); For<ITwo>().LifecycleIs(thread).Use(x => x.GetInstance<IOne>() as Impl); 回答评论: For<Impl>().LifecycleIs(thread).Use<Impl>(); For<IOne>().LifecycleIs(thread).Use(x => x.GetInstance<Impl>()); For<ITwo>().LifecycleIs(thread).Use(x => x.GetInstance<Impl>()); 这将做你想要的.我个人认为,因为您正在控制StructureMap的配置,您可以假设要求对象(ITwo)将返回非空值,并且第一个配置正常.这是一个偏好问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |