Внедрение по умолчанию всегда должно разрешаться для декоратора службы, но в некоторых особых случаях я хотел бы использовать метаданные, атрибуты или другое, чтобы сигнализировать о необходимости использования ServiceA.
Я бы не пошел по этому маршруту, потому что это означает, что во время построения ваших графов объектов требуются данные времени выполнения. Это кодовый запах , если не сказать больше.
Вместо этого, предпочтите, чтобы структура ваших графов объектов оставалась неизменной во время выполнения вашего приложения. Вместо этого, если какое-то поведение необходимо применить для некоторых запросов, в то время как его следует опускать во время других запросов того же приложения, предпочтите создание этого поведения в самом декораторе или создайте дополнительный сервис, который позволяет переключаться между op и фактическое поведение во время выполнения, основанное на существующих данных времени выполнения.
Однако правильным подходом было бы применение условного декоратора на основе сервисов, которые он декоратор, и других статических метаданных. Например, вы можете пометить ServiceA
атрибутом [Cache]
и ServiceB
атрибутом [NoCache]
и соответственно применить декоратор. Обратите внимание, что в этом случае структура графика не изменится во время выполнения, потому что ServiceA
всегда будет украшен, а ServiceB
никогда не будет. Однако я не уверен, что условно применить декоратор в Autofac.