1

同じインターフェースを実装する複数のコンポーネントを自動的に登録しています。

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回含まれることになります。

インターフェイスに基づいて自動登録を行い、特定の依存関係に自動的に登録するにはどうすればよいですか?

4

1 に答える 1

3

サービスとして公開したい場合は、追加WithService.Self()する必要があります。SpecificPostProcessor

于 2012-06-30T06:04:53.743 に答える