Как создать Tagged Litetimes в Simple Injector? - PullRequest
2 голосов
/ 26 июня 2019

То, что я хочу, - это эквивалент 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 экземпляры будут одинаковыми.

1 Ответ

0 голосов
/ 19 июля 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...