同じインターフェースを実装する複数のコンポーネントを自動的に登録しています。
container.Kernel.Resolver.AddSubResolver(
new ArrayResolver(container.Kernel));
container.Register(AllTypes.FromAssembly(Assembly.GetExecutingAssembly())
.BasedOn<IPaymentPostProcessor>()
.WithService.FromInterface(typeof(IPaymentPostProcessor))
.Configure(c => c.Named(c.Implementation.Name))
.Configure(c => c.LifeStyle.PerWebRequest));
これは、配列自体に依存している場合に機能します。
public class PaymentPostProcessorManager{
public PaymentPostProcessorManager(IPaymentPostProcessor[] processors){}
}
しかし、インターフェースを実装する特定のコンポーネントに依存している場合はそうではありません。
public class SpecialService{
public OtherService(SpecificPostProcessor processor){}
}
これは失敗し、SpecificPostProcessorにコンポーネントが登録されていないことを示します。そのSpecificPostProcessorを個別に登録すると、配列の解像度に2回含まれることになります。
インターフェイスに基づいて自動登録を行い、特定の依存関係に自動的に登録するにはどうすればよいですか?