Именная массовая регистрация в Виндзорском замке
В моем проекте у меня есть интерфейс 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)
)
Обычно явное именование ваших компонентов не должно использоваться, если у вас нет нескольких компонентов с одним и тем же классом реализации, поэтому просто убедитесь, что это действительно нужно.