为不同的实现提供相同类型的不同配置?

时间:2016-09-06 18:24:10

标签: c# castle-windsor

我有两个实现,每个实现都需要一组不同的相同类型的配置数据

public ConsumerA(Configuration config) : IConsumerA { ... }
public ConsumerB(Configuration config) : IConsumerB { ... }

在我的安装程序中,我让Windsor解决了这些实现:

container.Register(
    Component.For<IConsumerA>().ImplementedBy<ConsumerA>().LifestyleTransient(),
    Component.For<IConsumerB>().ImplementedBy<ConsumerB>().LifestyleTransient()
);

我如何要求Windsor根据各自的实施方案解决配置?

1 个答案:

答案 0 :(得分:0)

我最终做的是命名配置和使用工厂,有点像:

Component.For<IConsumerA>().ImplementedBy<ConsumerA>()
    .DependsOn(Dependency.OnComponent(typeof(Configuration), "configurationA")).LifestyleTransient(),
Component.For<IConsumerB>().ImplementedBy<ConsumerB>()
    .DependsOn(Dependency.OnComponent(typeof(Configuration), "configurationB")).LifestyleTransient(),

Component.For<Configuration>().UsingFactoryMethod(
   k => k.Resolve<ConfigurationFetcher>()
       .GetConfigurationSection<ConfigurationSection>(ConfigurationSection.ConfigurationASectionName)
       .GetConfiguration()).Named("configurationA"),
Component.For<Configuration>().UsingFactoryMethod(
   k => k.Resolve<ConfigurationFetcher>()
       .GetConfigurationSection<ConfigurationSection>(ConfigurationSection.ConfigurationBSectionName)
       .GetConfiguration()).Named("configurationB"),