То, что я хочу, - это эквивалент Simple Injector для тегов времени жизни Autofac :
Я прочитал документацию Simple Injector.Наиболее вероятный способ сделать это - использовать пользовательский стиль жизни Simple Injector :
Но документация по нему очень скудная, и я не могу понять, как получить от нее то, что я хочу,Как я могу получить эквивалент помеченных областей Autofac в Simple Injector?
Пример чего-то, что я хотел бы:
// 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
экземпляры будут одинаковыми.