我有一个名为 TypeA 的类型。
TypeA 实现了 2 个接口(interface):IOne 和 ITwo
public class TypeA : IOne, ITwo
{
public TypeA(IThree ithree)
{
...
}
}
我想配置 StructureMap 以便每个线程只有一个 TypeA 实例。我希望任何 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) 将返回一个非空值,并且第一个配置很好。这是一个偏好问题。
关于c# - 我可以让 StructureMap 管理具体类型的生命周期吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15240784/