Autofac: есть ли какой-нибудь способ получить существующий LifetimeScope из контейнера, чтобы я мог избежать передачи его ссылки? - PullRequest
0 голосов
/ 10 июня 2019

Я только начал использовать Autofac в проекте WPF.Я зарегистрировал несколько типов, чтобы они использовали InstancePerLifetimeScope.

Итак, например:

var builder = new ContainerBuilder();
builder.RegisterType<MyType>()
    .AsSelf()
    .InstancePerLifetimeScope()
IContainer container = builder.Build();

Теперь я хочу создать целую область видимости, в которую MyType можно разрешить.

Итак, я делаю это следующим образом внутри одной из моих ViewModels:

        var lts = container.BeginLifetimeScope();
        lts.Resolve<MyType>();

Пока все хорошо.

Но мне нужно разрешить MyType из других ViewModelsсохраняя его в том же LifeTimeScope.Единственный способ сделать это - передать ссылку lts в другие ViewModels, чтобы я мог выполнить разрешение там.

Есть ли способ получить / получить область действия, на которую ссылается lts из контейнера, чтобы я мог избежать передачи его другим ViewModels?

Итак, в псевдокоде: container.GetScope["xxx"].Resolve<MyType>();.

Или, возможно, у Autofac уже есть подход к решениюс этим типом сценария?

1 Ответ

1 голос
/ 11 июня 2019

Родительские области времени жизни, включая контейнер, не отслеживают и не хранят ссылки на созданные области времени жизни. Это означает , если вы создаете область действия на всю жизнь, вы должны отследить ее и убедиться, что она правильно настроена . Если вам нужен способ найти область, которая была создана, вы должны создать этот механизм. В других типах приложений в этом помогает библиотека интеграции - например, в приложениях ASP.NET время существования запроса отслеживается в текущем контексте запроса. В настоящее время нет специальной библиотеки интеграции для приложений WPF, предоставленной командой Autofac, поэтому вам придется найти такую ​​вещь или создать какой-то механизм, который будет работать для вас. Нет никаких указаний или конкретных рекомендаций о том, как этого добиться, потому что то, как это отслеживается, когда что-то удаляется или создается и т. Д., Будет зависеть от конкретного приложения.

...