gpt4 book ai didi

c# - 如何在 Simple Injector 中创建 Tagged Litetimes?

转载 作者:太空宇宙 更新时间:2023-11-03 14:41:24 25 4
gpt4 key购买 nike

我想要的是 Autofac 的 Simple Injector 等价物 tagged lifetimes :

我已阅读 Simple Injector 的文档。最可能的方法是使用 Simple Injector 的 custom lifestyles。 :

但是关于它的文档非常少,我不知道如何从中得到我想要的东西。我怎样才能在 Simple Injector 中获得与 Autofac 的标记作用域等效的东西?

我想要的东西的例子:

// Arrange
var container = new Container();

container.Register<ICommand, ConcreteCommand>(new AsyncScopedLifestyle());
container.Register<IDBContext, ConcreteDbContext>(new AsyncScopedLifestyle("dbContext"));

using (AsyncScopedLifestyle.BeginScope(container))
{
// Act
var iCommandInstance1 = container.GetInstance<ICommand>();
IDBContext iDbContextInstance1 = null;
IDBContext iDbContextInstance2 = null;

using (AsyncScopedLifestyle.BeginScope(container, "dbContext"))
{
var iCommandInstance2 = container.GetInstance<ICommand>();
iDbContextInstance1 = container.GetInstance<IDBContext>();

// Call things that depend on IDBContext here

// Assert
Assert.IsTrue(object.ReferenceEquals(iCommandInstance1, iCommandInstance2));
}

using (AsyncScopedLifestyle.BeginScope(container, "dbContext"))
{
var iCommandInstance3 = container.GetInstance<ICommand>();
iDbContextInstance2 = container.GetInstance<IDBContext>();

// Call things that depend on IDBContext here

// Assert
Assert.IsTrue(object.ReferenceEquals(iCommandInstance1, iCommandInstance3));
}

Assert.IsFalse(object.ReferenceEquals(iDbContextInstance1, iDbContextInstance2));
}

在我的例子中,让两个 IDBContext 实例相同是没有意义的。

最佳答案

Simple Injector 不支持此功能。如果您想使用自定义生活方式手动实现此功能,则必须重写 Simple Injector 的大部分内容。如果您确实需要此功能,请使用 AutoFac 或其他支持它的依赖注入(inject)框架。

关于c# - 如何在 Simple Injector 中创建 Tagged Litetimes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56775600/

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