我在我的项目界面中有
public interface IUpdater
{
void Update();
}
和一些实现UpdaterA, UpdaterB, UpdaterC
我也有装饰器DecoratorUpdater
。所有这些类都实现了接口IUpdater
,我需要配置 Windsor Castle 以在类中用作数组装饰的实现UpdaterService
我的解决方案如下,但它不是那么容易(目前我有 7 个更新器和 2 个装饰器)
// decorators
Container.Register(
Component.For<IUpdater, DecoratorUpdater>().LifestylePerWebRequest().Named("DecoratorUpdaterA").DependsOn(Dependency.OnComponent("underlyingUpdater", "NamedUpdaterA")),
Component.For<IUpdater, DecoratorUpdater>().LifestylePerWebRequest().Named("DecoratorUpdaterB").DependsOn(Dependency.OnComponent("underlyingUpdater", "NamedUpdaterB")),
Component.For<IUpdater, DecoratorUpdater>().LifestylePerWebRequest().Named("DecoratorUpdaterC").DependsOn(Dependency.OnComponent("underlyingUpdater", "NamedUpdaterC")));
// updaters
Container.Register(
Component.For<IUpdater, UpdaterA>().LifestylePerWebRequest().Named("NamedUpdaterA"),
Component.For<IUpdater, UpdaterB>().LifestylePerWebRequest().Named("NamedUpdaterB"),
Component.For<IUpdater, UpdaterC>().LifestylePerWebRequest().Named("NamedUpdaterC"));
// usages
Container.Register(Component.For<UpdaterService>().ServiceOverrides(new
{
updaters = new[]
{
"DecoratedUpdaterA",
"DecoratedUpdaterB",
"DecoratedUpdaterC",
}
}));
有没有更好的方法来配置温莎城堡?