Я хочу, чтобы 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 были одинаковыми.
@Steven Приведен пример.
Спасибо за предоставленный пример. К сожалению, то, что вы описываете, это проблема XY. Не могли бы вы вместо этого объяснить реальная проблема?





Simple Injector не поддерживает эту функцию. Если вы хотите реализовать эту функцию вручную с помощью пользовательских стилей жизни, вам придется переписать большую часть Simple Injector. Если вам действительно нужна эта функция, используйте AutoFac или другую платформу внедрения зависимостей, которая ее поддерживает.
В Simple Injector нет эквивалента. Пожалуйста, предоставьте нам пример того, чего вы пытаетесь достичь и почему.