gpt4 book ai didi

c# - DryIoc 范围和重用

转载 作者:行者123 更新时间:2023-12-04 10:37:45 28 4
gpt4 key购买 nike

我想注册两个服务,A & B ,有不同的生命周期。

我的用例类似于“浏览器”和“标签”。
我在可执行生命周期(浏览器)上有一个范围,每个选项卡都有一个“子范围”。
我要 A成为浏览器范围内的单例(浏览器生命周期)。
现在我想解决一个不同的 B ,但相同 A在每个标签中。
我已经阅读了 GitHub 文档,但看起来我会得到一个新的 A在每个标签中。

伪代码如下所示:

var container = new Container();
container.Register<A>(Reuse.Scoped);
container.Register<B>(Reuse.Scoped);


using (var browserScope = container.OpenScope())
{
using (var tabScope1 = browserScope.OpenScope())
{
var a1 = tabScope1.Resolve<A>();
var b1 = tabScope1.Resolve<B>();
}

using (var tabScope2 = browserScope.OpenScope())
{
var a2 = tabScope2.Resolve<A>();
var b2 = tabScope2.Resolve<B>();
}
}

我要 a1a2被解析为同一个实例。
我怎样才能做到这一点?

最佳答案

您可以使用这样的命名范围来实现它 - 现场示例 https://dotnetfiddle.net/pqZ4ah

完整来源:

using System;
using DryIoc;

public class Program
{
class A { }
class B { }

enum UIScope { Browser, Tab }

public static void Main()
{
var container = new Container(r => r.WithUseInterpretation());
container.Register<A>(Reuse.ScopedTo(UIScope.Browser));
container.Register<B>(Reuse.ScopedTo(UIScope.Tab));

using (var browserScope = container.OpenScope(UIScope.Browser))
{
A a1, a2;
using (var tabScope1 = browserScope.OpenScope(UIScope.Tab))
{
a1 = tabScope1.Resolve<A>();
var b1 = tabScope1.Resolve<B>();
}

using (var tabScope2 = browserScope.OpenScope(UIScope.Tab))
{
a2 = tabScope2.Resolve<A>();
var b2 = tabScope2.Resolve<B>();
}

Console.WriteLine(a1 == a2);
}
}
}

关于c# - DryIoc 范围和重用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60092293/

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