Добавление ответа для демонстрации предпочтения @ Kryzsztof переопределений в обслуживании. Вместо заводского метода:
container.Register(Component.For<ICostCalculator>()
.UsingFactoryMethod(k =>
new ServiceTaxApplicableCostCalculator(
k.Resolve<ServiceTaxCalculator>(),
k.Resolve<DefaultCostCalculator>())
)
);
Вместо этого вы должны указать зависимости через DependsOn
:
container.Register(Component.For<ICostCalculator>()
.ImplementedBy<ServiceTaxApplicableCostCalculator>()
.DependsOn(Dependency.OnComponent("with", typeof(ServiceTaxCalculator)))
.DependsOn(Dependency.OnComponent("without", typeof(DefaultCostCalculator))));
Единственное преимущество, которое для меня очевидно, заключается в том, что если в конструктор ServiceTaxApplicableCostCalculator
будет добавлен другой сервис, случай переопределения сервиса продолжит работать без каких-либо изменений (автоматическое разрешение нового сервиса), тогда как фабричный метод потребуется еще один звонок на Resolve
. Кроме того, это, безусловно, более идиоматично, чем использование фабричного метода для явного создания объекта.
Более подробная информация доступна в документации .