私は自分のプロジェクトインターフェースに持っています
public interface IUpdater
{
void Update();
}
そして、いくつかの実装UpdaterA, UpdaterB, UpdaterC
にはデコレータもありDecoratorUpdater
ます。これらのクラスはすべてインターフェイスIUpdater
を実装しており、クラスで装飾された配列として使用するためにウィンザー城を構成する必要があります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",
}
}));
ウィンザー城を構成するより良い方法はありますか?