2014-10-01 3 views
2

Как вы, возможно, знали, Метод OnCreate используется для класса ComponentRegistration, созданного Component.For <> invocation. Почему Classes.FromAssembly не хватает этой функции? Почему мы не можем использовать OnCreate для каждого класса в указанном пространстве имен. Есть ли обходной путь?Замок Windsor: OnCreate for BaseOnDescriptor

Я хотел бы это было сделано следующим образом:

Classes 
    .FromThisAssembly() 
    .InSameNameSpaceAs<TInterface>() 
    .OnCreate<TInterface>(instance => instance.Method()); 

ответ

2

Classes позволяет зарегистрировать компоненты на основе конвенций, поэтому он не обрабатывает отдельные компоненты, а, скорее коллекции компонентов; вы не можете настроить их индивидуально с помощью свободного интерфейса. Однако вы можете использовать метод Configure, который позволяет вам управлять каждым компонентом в соответствии с вашими потребностями.

Classes 
    .FromThisAssembly() 
    .InSameNameSpaceAs<TInterface>() 
    .Configure(c => { 
     c.OnCreate(instance => instance.Method()) 
    }); 

Есть также ConfigureFor и ConfigureIf методы, которые позволяют фильтровать, какие компоненты в конвенции вы хотите обработать.

+0

Что я должен интерпретировать «Компонент» в ConfigureFor выражение? Должен ли он восприниматься как «все потомки Компонента» или только сам Компонент? – Dmitry

+0

Я точно не знаю, никогда не использовал синтаксис, но было бы разумно, что это для самого компонента. Лучше проверить это самостоятельно, хотя я не смог найти документацию – samy

+0

@Dmitry, вы протестировали вопрос о последующих действиях в области компонентов/потомков компонентов? – samy

Смежные вопросы