Именная массовая регистрация в Виндзорском замке - PullRequest
1 голос
/ 07 марта 2019

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

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

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

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

1 Ответ

1 голос
/ 08 марта 2019

Похоже на классический сценарий для 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)
        )

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...