我想要的是 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)框架。
我是一名优秀的程序员,十分优秀!