我想要的是Simple Injector等效于Autofac的tagged lifetimes:
我已经阅读了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
实例相同是没有意义的。
答案 0 :(得分:0)
简单进样器不支持此功能。如果要通过自定义生活方式手动实现此功能,则必须重写大部分的Simple Injector。如果您确实需要此功能,请使用AutoFac或其他支持它的依赖项注入框架。