gpt4 book ai didi

c# - 我可以让 StructureMap 管理具体类型的生命周期吗?

转载 作者:行者123 更新时间:2023-11-30 12:48:00 25 4
gpt4 key购买 nike

我有一个名为 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com