Именная массовая регистрация в Виндзорском замке

В моем проекте у меня есть интерфейс IProcess и множество классов, реализующих этот интерфейс. Мне нужно зарегистрировать все эти реализации. Следующий код работает нормально для меня:

Container.Register(Component.For<IProcess>().Named("SampleProcess").ImplementedBy<SampleProcess>());
Container.Register(Component.For<IProcess>().Named("SampleProcess2").ImplementedBy<SampleProcess2>());

Однако использование этого подхода для регистрации утомительно, если у меня много реализаций. Поэтому я ищу способ регистрации, чтобы зарегистрировать все реализации IProcess в данной сборке по имени. Имя, которое должно использоваться для регистрационного ключа, является просто именем класса.

Может кто-нибудь дать мне подсказку, где искать?

1 ответ

Решение

Похоже, классический сценарий для API регистрации конвенции.

container.Register(
    Classes.FromThisAssembly()
        .BasedOn<IProcess>()
        .WithServiceBase()
        // and then if you *really* need to explicitly control naming
        .Configure(c => c.Named(c.Implementation.Name)
        )

Обычно явное именование ваших компонентов не должно использоваться, если у вас нет нескольких компонентов с одним и тем же классом реализации, поэтому просто убедитесь, что это действительно нужно.

Другие вопросы по тегам