Многократная регистрация службы с разными областями действия в Autofac - PullRequest
0 голосов
/ 02 июля 2018

Я работаю с устаревшей кодовой базой, которая использует Autofac и регистрирует множество (если не все) зависимостей как PerRequest.

Мы разрабатываем новые функциональные возможности и хотели бы, чтобы новые сервисы разрешали свои зависимости индивидуально для каждого сервиса, а не для каждого запроса. Первоначальный сервис получается сервисным локатором через Resolve.

Какой оптимальный способ добиться этого с помощью Autofac?

Я полагаю, что Keyed Services могут помочь здесь. Вот пример конфигурации:

builder.RegisterType<Impl>().As<IDependency>().InstancePerLifetimeScope(); 
builder.RegisterType<Impl>().As<IDependency>().InstancePerDependency().Keyed<IDependency>("shinyNewService");       

builder.RegisterAssemblyTypes(newServiceAssembly).AsClosedTypesOf(newServiceInterface).WithParameter
                    (
                        new ResolvedParameter
                        (
                            (pi, ctx) => pi.ParameterType == typeof(IDependency),
                            (pi, ctx) => ctx.ResolveKeyed<IDependency>("shinyNewService")
                        )
                    );

Кажется, работает в моем случае, но мы также хотели бы получать новый экземпляр ShinyNewService каждый раз, когда вызывается Resolve, поэтому я думаю, что имеет смысл также настроить его на InstancePerDependency.

Есть ли у кого-нибудь совет относительно этого подхода? Я также рассматривал помеченные области действия на всю жизнь, но не смог найти полное решение. Любой вклад приветствуется, спасибо.

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